我在设置批量插入的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',
在这里,变量对于每种情况都有一个固定路径。
因此,请尝试使用预先定义的文件路径。