не удалось получить первое вставное имя строк в контуре курсора

94
10

Я пытаюсь вставить некоторые строки во временную таблицу, которая требует идентификации из таблицы A... эта таблица вставляется из курсора.. все работает нормально, но только проблема, которую я получаю, заключается в том, что я не получаю идентификация первой вставленной строки в таблице A, предположим, что я вставляю 3 строки в таблицу A... я получаю последние 2 строки во временной таблице.. не первый... и если я отправляю только одну строку в таблице A, тогда временная таблица пуста здесь моя хранимая процедура. таблица 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

спросил(а) 2013-09-14T10:35:00+04:00 6 лет, 9 месяцев назад
1
Решение
93

Во-первых, вы должны заменить этот курсор следующим 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-14T11:06:00+04:00 6 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема