0

通过我的 ASP.NET / SQL Server 2008 应用程序,我需要从 CSV 文件(可能是一百万条记录)中批量插入记录。我将首先将它们导入临时表,这样我就可以在将一些数据移动到永久表之前对其进行操作。

这将定期发生。并且多个导入可能同时发生。我还必须告诉其他人的每个进口。

我最初的计划是使用其中包含 Import_ID 的列。但我看到批量插入不允许我设置字段值。

进行搜索时,我发现我可以在视图中进行批量插入。而且我猜测视图可以有一个命名参数(Import_ID)。但是我还没有真正学会设置参数,所以我不知道这是否可能,或者如何去做。

有人可以告诉我如何做到这一点,或者让我知道另一种解决方案吗?

谢谢

4

1 回答 1

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;
于 2012-05-04T03:53:01.933 回答