【发布时间】:2017-01-13 09:23:21
【问题描述】:
我已经修改了一个在线查询,将 CSV 文件批量导入 SQL 服务器。但是,我的 CSV 在底部有一个备用换行符,因此我为文件中的行数添加了一个计数器,然后在 BULK INSERT 中设置了 LASTROW 参数。
但是,因为我正在循环 BULK INSERT,所以我需要将文件名传递给行计数器。但是当@filllastrow 执行时,我收到错误“必须声明标量变量“@lastrow””。有人可以帮忙吗?
谢谢
罗伯
declare @filename varchar(255),
@path varchar(255),
@sql varchar(8000),
@filllastrow varchar(8000),
@cmd varchar(1000)
declare c1 cursor for SELECT WHICHPATH,WHICHFILE FROM ALLFILENAMES where WHICHFILE like '%.csv%'
open c1
fetch next from c1 into @path,@filename
While @@fetch_status <> -1
begin
declare @lastrow varchar(10)
set @filllastrow = 'set @lastrow = convert(varchar(10),(SELECT count(*) FROM OPENROWSET( BULK '''+ @path + @filename+''', FORMATFILE = ''E:\ereferrals\MyFormat_Counting.fmt'', MAXERRORS=10) AS a ) - 1)'
print @filllastrow
exec (@filllastrow)
set @sql = 'BULK INSERT eref FROM ''' + @path + @filename + ''' '
+ ' WITH (
FIELDTERMINATOR = '','',
ROWTERMINATOR = ''0x0A'',
FIRSTROW = 2 ,
LASTROW = '+convert(varchar,@lastrow)+',
ERRORFILE = ''e:\ereferrals\probs.log''
) '
print @sql
EXECUTE @sql
fetch next from c1 into @path,@filename
end
close c1
deallocate c1
【问题讨论】:
标签: sql-server bulkinsert declare