Вставка дубликатов при вставке DataTable в хранимой процедуре - PullRequest
0 голосов
/ 19 октября 2018

Я вставляю DataTable в базу данных, используя StoredProcedure, но проблема в том, что она вставляет вдвое больше действительного числа записей DataTable для вставки, процедура ниже, пожалуйста, помогите мне, если яиспользуя неправильный подход, зачем дублировать строки?Возврат, который требуется, работает нормально.Заранее спасибо

ALTER PROCEDURE [dbo].[proc_InsertStore_Recvry]
(@dt_Recovery Recovery_Store READONLY)

AS
Declare @RecoveryIDs as Table (IDs int, ClientIds int)
declare @StoreID int
declare @ClientID int
declare @Arrears decimal(18, 2)
declare @NetDues decimal(18, 2)
declare @Received decimal(18, 2)
Declare @RecoveryRecID int

begin
select * into #tempTable from @dt_Recovery

declare @Count int
set @Count= (select COUNT(*) from #tempTable)

while(@Count > 0)
begin

set @Count = @Count-1
set @ClientID = (Select top 1 ClientID from #tempTable)
set @StoredID = (Select top 1 StoredID from #tempTable where ClientID=@ClientID)
set @Arrears = (Select top 1 Arrears from #tempTable where ClientID=@ClientID)
set @NetDues = (Select top 1 NDues from #tempTable where ClientID=@ClientID)
set @Received = (Select top 1 Received from #tempTable where ClientID=@ClientID)

Insert into tblRecovery (StoreID,  ClientID, Arrears, NetDues, Received)
values (@StoreID,@ClientID,@Arrears,@NetDues,@Received)

select @RecoveryID = Scope_Identity()

insert into @RecoveryIDs (IDs,ClientIds) values (@RecoveryID, @ClientID )

delete from #tempTable where ClientID=@ClientID

end
Select * from @RecoveryIDs

1 Ответ

0 голосов
/ 19 октября 2018

похоже, что вы используете SQL Server.Если да, то почему вы используете цикл while для вставки значений в таблицу и возврата вставленных идентификаторов?То же самое может быть достигнуто гораздо лучшим способом с помощью предложения OUTPUT: Документация OUTPUT

Пример:

INSERT INTO tblRecovery(StoreID,  ClientID, Arrears, NetDues, Received) OUTPUT INSERTED.ID, INSERTED.CLientId INTO @RecoveryIDs(IDs, ClientIds) SELECT StoredID, ClientID, Arrears, NDues, Received FROM #tempTable

Кроме этого, похоже, нет проблем сваш код SQL.Не могли бы вы также опубликовать код .NET?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...