我在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
在我的存储过程中,此操作失败并出现此错误:
无法从OLE DB提供程序“BULK”获取链接服务器“(null)”的行。
但是代码打印出来了:
BULK INSERT loadSent
FROM 'D:\EMVImports\etl_sent_20130529.txt'
WITH (
FIRSTROW = 2
,formatfile='D:\EMVScripts\Sent_Format.xml'
)
就像一个魅力。我不知道为什么它在sp_executesql
下会失败。
答案 0 :(得分:0)
我使用了很多类似的查询。它正在发挥作用。
DECLARE @filepath nvarchar(500) SET @filepath = N'e:\5-digit Commercial.csv' DECLARE @bulkinsert NVARCHAR(2000) SET @bulkinsert = N'BULK INSERT ZIPCodes FROM ''' + @filepath + N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')' EXEC sp_executesql @bulkinsert
如何设置@sentFile的值?
答案 1 :(得分:0)
我们无法为From'
动态设置“BULK INSERT
文件路径。
您正在动态生成路径
set @sentFile = @StrImportFolder + N'etl_rnli_sent_'+ @loadDate + N'.txt'
此处@loadDate
是文件名的可变组件。
上面给出的工作示例使用带有变量的固定路径事件:
SET @filepath = N'e:\5-digit Commercial.csv',
此处变量的每个案例都有一个固定路径。
因此,请尝试使用预定义的文件路径。