通过我的ASP.NET / SQL Server 2008应用程序,我需要从CSV文件(可能是一百万条记录)批量插入记录。我会先将它们导入到临时表中,这样我就可以在将数据移动到永久表之前对其进行操作。
这将定期发生。多次进口可能同时发生。我还必须告诉其他人的每一个进口。
我原来的计划是使用一个包含Import_ID的列。但我发现批量插入不允许我设置字段值。
进行搜索,我发现我可以在视图中进行批量插入。我猜这个视图可以有一个命名参数(Import_ID)。但我还没有真正学会设置参数,所以我不知道这是否可能,或者如何做到。
有人可以告诉我怎么做,或让我知道另一种解决方案吗?
由于
答案 0 :(得分:2)
您可以批量插入临时临时表,例如,因为您知道您的SPID(并假设您可以信任某些静态表的模式),您可以这样说,指定CSV文件的@filepath和@ImportID,创建一个以会话ID作为后缀的表,并在单个动态SQL批处理中完成所有工作:
DECLARE @sql NVARCHAR(MAX), @spid VARCHAR(12) = RTRIM(@@SPID);
SET @sql = N'SELECT * INTO dbo.Stage' + @spid
+ ' FROM dbo.RealStagingTable WHERE 1 = 0;';
SET @sql += N'BULK INSERT dbo.Stage' + @spid + ' FROM ('''
+ @filepath + ''' WITH (options);'
SET @sql += N'INSERT dbo.RealTable(ImportID, other columns)
SELECT ' + RTRIM(@ImportID) + , other columns
FROM dbo.Stage' + @spid + ';';
SET @sql += N'DROP TABLE dbo.Stage' + @spid + ';'
EXEC sp_executesql @sql;