11

CSVを一時テーブルに挿入しようとしていますが、このSQLステートメントが機能していないようです。

DECLARE @TempTable TABLE (FName nvarchar(max),SName nvarchar(max),
                          Email nvarchar(max));
BULK INSERT @TempTable 
FROM 'C:\52BB30AD694A62A03E.csv' 
WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')

次のエラーが発生します。

Incorrect syntax near '@TempTable'.

4

4 に答える 4

18

テーブル変数にBULKINSERTを実行することはできません。したがって、この行:

BULK INSERT @TempTable 

エラーの原因です。


参考までに、これに対する最も簡単な修正は、おそらくテーブル変数の代わりに#Tempテーブルを使用することです。したがって、SQLコードは次のように変更されます。

CREATE TABLE #TempTable (FName nvarchar(max),SName nvarchar(max),
                          Email nvarchar(max));
BULK INSERT #TempTable 
FROM 'C:\52BB30AD694A62A03E.csv' 
WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')
于 2013-01-01T20:17:32.107 に答える
5

使用時にテーブル変数を使用することはできませんBULK INSERT

あなたはこれを試すことができます

DECLARE @TempTable TABLE (FName nvarchar(max),SName nvarchar(max),
                          Email nvarchar(max));
INSERT INTO @TempTable
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Text;Database=C:\Users\Administrator\Dropbox\Personal\testing.vineup.com\admin\imported;HDR=Yes;FORMAT=Delimited(,)', 'SELECT * FROM [52BB30AD694A62A03E.csv]')
于 2013-01-01T20:27:03.250 に答える
0

テーブル変数に一括挿入を使用することはできません。そのために、以下のような一時テーブルを作成しました。

CREATE TABLE #TEMPtbl 
(
    [FNAME] [nvarchar](MAX) ,
    [SNAME] [nvarchar](MAX) ,
    [EMAIL] [nvarchar](MAX) 
)
GO 
BULK INSERT #TEMPtbl FROM 'C:\FileName.csv' 
WITH (FIRSTROW = 1, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n')

これを試すことができます。それはあなたを助けるかもしれません。

于 2013-01-02T04:55:51.023 に答える
-1

私はあなたがこのようなことをしたいと思います:

DECLARE @sql NVARCHAR(8000)
SET @sql = 
'
BULK INSERT #TempTable ...' ;

あなたがしているのは、変数を非動的SQLステートメントに強制しようとしていることです。そのため、コンパイラ/インタプリタ(SQLの正しい用語がどれであるかはわかりません)は、適切に解析できないため、爆破されています。

于 2013-01-01T20:17:48.410 に答える