Я адаптировал запрос, найденный онлайн, для массового импорта CSV-файлов в SQL-сервер. Однако у моих CSV есть запасной канал в нижней части, поэтому я добавил счетчик для количества строк в файле, а затем установил параметр LASTROW в BULK INSERT.Ошибка SQL-сервера: Должен объявить скалярную переменную «@lastrow»
Однако, поскольку я зацикливаю BULK INSERT, мне нужно передать имя файла в счетчик строк. Но я получаю сообщение об ошибке «Должен объявить скалярную переменную« @lastrow », когда выполняется @filllastrow. Может ли кто-нибудь помочь?
Благодаря
Роб
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
Спасибо. Я удалил запасной кронштейн после «MAXERRORS = 10» как «а затем выдал ошибку Msg 102, уровень 15, состояние 1, строка 5 Неверный синтаксис рядом с« @lastrow ». –