SQLサーバーにCSVファイルを一括インポートするためにオンラインで検索されたクエリを採用しました。しかし、私のCSVには余分な行送りがあるので、ファイルの行数にカウンタを追加し、BULK INSERTにLASTROWパラメータを設定しました。SQLサーバーエラー:スカラー変数 "@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
ありがとうございました。 "MAXERRORS = 10)"の後にスペアブラケットを削除してからエラーを返します。 メッセージ102、レベル15、状態1、行5 '@lastrow'の近くに構文が正しくありません。 –