0

我一直在尝试将一些行插入到需要表 A 中的标识的临时表中......这个 A 表正在从游标插入......这里一切正常,但我得到的唯一问题是我没有得到表 A 中第一个插入行的标识假设我在表 A 中插入 3 行 ...我在临时表中得到最后 2 行 ..不是第一个 ..如果我在表 A 中只发送一行,那么临时表在这里是空白的是我的存储过程..table A 是 tblClients

Create PROCEDURE [dbo].[lsp1_propAdmClnt]          
(          
@usrprflId bigint,          
@preClient tpClient readonly           

)          
as            
declare @err int         
CREATE TABLE #tblids(      
clntid int,      
imgname nvarchar(350)  

)  
declare @clntid as int      
declare @clntname nvarchar(300)      
declare @imgname nvarchar(300)     
Begin Transaction        




declare transfclntid cursor for select  clntname, [imgname] from @preClient      
open transfclntid      
fetch next from transfclntid into @clntname, @imgname      
while @@fetch_status=0      
begin      

insert into tblClients (usrprflId,Name,Img,cdate) 
values(@usrprflId, @clntname, @imgname,GETDATE())      

SET @clntid = (SELECT SCOPE_IDENTITY())    
insert into #tblids (clntid, imgname) values (@clntid, @imgname)      
fetch next from transfclntid into @clntname, @imgname      
end      
close transfclntid      
deallocate transfclntid      


 select * from  #tblids                        
select @err=@@TOTAL_ERRORS          
if(@err<>0)          
Begin          
Rollback Transaction          
return 0          
End          

Commit transaction 
4

1 回答 1

0

首先,您应该将该游标替换为以下INSERT SELECT语句:

declare @tblids table
(
    clntid INT NOT NULL,
    imgname NVARCHAR(350)
);
insert into tblClients (usrprflId, Name, Img, cdate) 
output inserted.clntid, inserted.Img into @tblids (clntid, imgname)
select  @usrprflId, clntname, [imgname], GETDATE()
from @preClient

然后,如果您需要第一个身份值,您可以使用:

SELECT MIN(clntid)
FROM @tblids
于 2013-09-14T08:06:56.410 回答