0
我有大量数据想从C#Web应用程序发送到SQL Server数据库。目前我遍历循环中的数据并调用存储过程来添加数据。我返回插入(或现有)客户端记录的PK并将其添加到关联活动记录的外键,然后添加它们。我知道这不是非常有效,并且一直在研究使用表值参数。使用表值参数将PK返回到C#
我的数据集是类似以下内容:
Client (ID, FirstName, Surname, DOB ...)
Activity1 (ID, ClientID(FK), Date ...)
Activity2 (ID, ClientID(FK), Date ...)
我想向所有客户端添加为批量插入和ID的使用OUTPUT子句在SQL Server返回,然后用这些ID来添加自己的相关活动作为PK-FK关系。我无法弄清楚的唯一情况是如何检查数据库中是否存在一个客户端(基于FirstName,Surname和DOB),如果是这样,则返回该ID而不是将客户端添加为新记录。
作为测试,我已经创建了接受TVP像这样的存储过程:
CREATE PROCEDURE [dbo].[TestBulkAdd]
@Data AS dbo.Data READONLY
AS
BEGIN
DECLARE @IDS TABLE (ID INT, FirstName NVARCHAR(50), Surname NVARCHAR(50), DOB DATETIME2)
INSERT INTO Clients (FirstName, Surname, DOB)
OUTPUT inserted.* INTO @IDS
SELECT * FROM @Data
SELECT * FROM @IDS --Fills datatable in C# with returned data
END
GO
任何帮助,将不胜感激。
感谢的是,我不得不做出一个微小的变化。而不是SELECT * FROM @Data d我只能指定FirstName,Surname和DOB。 – bowfinger 2015-02-24 12:15:30
你说得很对。我纠正了答案。 – 2015-02-24 12:26:28