大容量插入作为动态sql失败



我在设置批量插入的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:EMVScriptsSent_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:EMVImportsetl_sent_20130529.txt'    
WITH (      
    FIRSTROW = 2      
    ,formatfile='D:EMVScriptsSent_Format.xml'      
)

工作起来很有魅力。我不知道它为什么在sp_executesql下失败。

我使用的是非常相似的查询。它正在发挥作用。

DECLARE@filepath nvarchar(500)SET@filepath=N'e:\ 5位商业.csvBulksert NVARCHAR声明(2000)SET@bulksert=N'BULK插入"中的ZIPCodes+@文件路径+N"WITH(FIRSTROW=2,字段终止符=",",行终止符="\N'")"EXEC sp_executesql@bulksert

如何设置@sentFile的值?

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

您正在动态生成路径

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

这里,@loadDate是文件名的可变组成部分。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新