4

我在设置批量插入的 SP 中有此代码:

begin try

    declare @sentFile nvarchar(255)
    declare @bulk_cmd nvarchar(1000) = ''
    declare @loadDate nvarchar(8) = Convert(nvarchar(8),@p_loadDate) -- @p_loadDate is char(8)

    set @StrImportFolder = N'D:\EMVImports\'
    set @sentFile = @StrImportFolder + N'etl_rnli_sent_'+ @loadDate + N'.txt'

    SET @bulk_cmd = N'BULK INSERT loadSent
                 FROM ''' + @sentFile + N'''
                 WITH (
                     FIRSTROW = 2
                     ,formatfile=''D:\EMVScripts\Sent_Format.xml'' 
                 )'
    Print @bulk_cmd
    EXECUTE sp_executesql @bulk_cmd

    --  more stuff happens here
end try

在我的存储过程中,失败并出现以下错误:

无法从链接服务器“(null)”的 OLE DB 提供程序“BULK”中获取行。

但是打印出来的代码:

BULK INSERT loadSent    
FROM 'D:\EMVImports\etl_sent_20130529.txt'    
WITH (      
    FIRSTROW = 2      
    ,formatfile='D:\EMVScripts\Sent_Format.xml'      
)

奇迹般有效。我不知道为什么它在sp_executesql.

4

2 回答 2

0

我正在使用非常相似的查询。它正在工作。

声明 @filepath nvarchar(500)
SET @filepath = N'e:\5-digit Commercial.csv'

声明@bulkinsert NVARCHAR(2000)

设置@bulkinsert =
       N'BULK INSERT ZIPCodes FROM ''' +
       @文件路径 +
       N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')'

执行 sp_executesql @bulkinsert

你如何设置@sentFile 的值?

于 2013-08-09T13:54:07.513 回答
0

我们不能为 'From'动态设置文件路径BULK INSERT

您正在动态生成路径

set @sentFile = @StrImportFolder + N'etl_rnli_sent_'+ @loadDate + N'.txt'

这里@loadDate是文件名的变量部分。

上面给出的工作示例使用带有变量的固定路径事件:

SET @filepath = N'e:\5-digit Commercial.csv',

在这里,变量对于每种情况都有一个修复路径。

因此,请尝试使用预定义的文件路径。

于 2013-12-17T11:48:44.970 回答