1

SQLServer2008で次のSQLを実行しようとしています-

DECLARE @sql nvarchar, @fullname nvarchar;

SET @fullname='1patents_corrected.csv';
SET @sql = 'BULK INSERT GooglePatentsIndividualDec2012.dbo.patent from ' + @fullname+ '     WITH  ( DATAFILETYPE = "char", FIELDTERMINATOR = "^", ROWTERMINATOR =  "\n" );'

EXEC(@sql)

ただし、このエラーが発生します-

メッセージ2812、レベル16、状態62、行1
ストアドプロシージャ「B」が見つかりませんでした。

私はここで何が間違っているのですか?

更新-クエリを変更しました。各varchar変数のサイズを指定しました。これで、コードは次のようになります-

 DECLARE @MyCounter int;
 DECLARE @Fileprefix nvarchar(1000), @Filesuffix nvarchar(1000), @fullname nvarchar(1000), @Counter_string nvarchar(1000), @sql nvarchar(1000);

 SET @MyCounter = 1;
 SET @Fileprefix= 'C:\Arvind_gpd\patents\';
 SET @Filesuffix='data_corrected.csv';

 WHILE (@MyCounter < 10)

 BEGIN;
 Set @Counter_string= Cast(@MyCounter AS varchar(1) );
 Set @fullname = (@Fileprefix+ @Counter_string + @Filesuffix );
 SET @sql = 'BULK INSERT GooglePatentsIndividualDec2012.dbo.patent from ' + @fullname+ 
 '  WITH  ( DATAFILETYPE = "char", FIELDTERMINATOR = "^", ROWTERMINATOR = "\n" );'
 EXEC(@sql);
 SET @MyCounter = @MyCounter + 1;
 END;  
 GO

しかし、今は別のエラーが発生しています-

 Msg 102, Level 15, State 1, Line 1

'C:'の近くの構文が正しくありません。メッセージ319、レベル15、状態1、行1キーワード「with」の近くの構文が正しくありません。このステートメントが共通テーブル式、xmlnamespaces節、または変更追跡コンテキスト節である場合、前のステートメントはセミコロンで終了する必要があります。

今、私は間違って何をしていますか:(?

4

2 に答える 2

7

変化する

DECLARE @sql nvarchar

DECLARE @sql nvarchar(2000)

デフォルトのサイズは1です

同じこと@fullname nvarchar;がそれにサイズを与えるために適用されます

于 2013-01-20T16:29:27.043 に答える
1

BULK INSERTを使用する場合は、ファイル名を引用符で囲む必要があります。

変化する

SET @sql = 'BULK INSERT GooglePatentsIndividualDec2012.dbo.patent 
from ' + @fullname+ 
WITH  ( DATAFILETYPE = "char", FIELDTERMINATOR = "^", ROWTERMINATOR ="\n" );'

SET @sql = 'BULK INSERT GooglePatentsIndividualDec2012.dbo.patent 
FROM ''' + @fullname + '''
WITH  ( DATAFILETYPE = ''char'', FIELDTERMINATOR = ''^'', ROWTERMINATOR =''\n'' )'

複数の一重引用符が一緒に束ねられていることに気付くでしょう。二重一重引用符は、SQL Serverでのエスケープを表します(つまり、別の引用符内で引用符を引用しています)。

また、コードで多くのセミコロンを使用しているようです。T-SQLで記述しているときにそれらを入れる必要はありません

于 2013-01-20T18:42:16.697 に答える