【问题标题】:Duplicate Entry Insertion while insertion of DataTable in Stored Procedure在存储过程中插入 DataTable 时重复条目插入
【发布时间】:2018-10-19 07:23:04
【问题描述】:

我正在使用StoredProcedure 在数据库中插入DataTable,但问题是,它插入的实际条目数是要插入的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

【问题讨论】:

  • 您不是简单地从代码中执行 SP 两次吗?
  • 请告诉我们,您是如何从您的 asp.net 应用程序调用 Sproc 的
  • 你的意思是@RecoveryIDs是数据表,还是你在后面的代码中填写DataTable?请解释您如何从页面的代码隐藏中执行该过程。
  • 我试图将代码粘贴到 cmets 中,但它超出了最大字符数限制...请您通过 Skype/Teamviewer ping 我。

标签: c# sql asp.net


【解决方案1】:

看起来您正在使用 SQL Server。如果是,那么为什么要使用 while 循环将值插入表并返回插入的 Id? 同样可以通过 OUTPUT 子句以更好的方式完成: OUTPUT documentation

例子:

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 代码也贴出来吗?

【讨论】:

  • 我认为您没有仔细阅读问题实际上我正在插入表格并返回在此存储过程会话中插入的条目的 PK。或者可能是我错了,你能告诉我它将在哪里返回所有插入的表 id(现在添加)。正如我提到的,我正在插入具有不同行数的表,所以情况是它插入了行,但应该插入的行数是应该插入的行数的两倍……你能通过 Skype/Teamviewer 给我打电话吗?
猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多