2013-01-01 28 views
7

我試圖將CSV插入到臨時表中,並且此SQL語句似乎不起作用。此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'.

+2

您不能使用表變量,當使用'BULK INSERT' –

+0

@rs時,您需要真正的表。很確定這不是真的 – Woot4Moo

+1

@ Woot4Moo哪部分?你可以解釋嗎?你可以發佈答案如何插入表變量,而不是像你在答案中那樣使用臨時表嗎? –

回答

13

你不能BULK INSERT到一個表變量。所以這一行:

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') 
-1

我想你想要做這樣的事情:

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

你在做什麼是試圖變力成非動態SQL語句。所以編譯器/解釋器(不知道哪個是SQL的正確名詞)正在轟炸,因爲它無法正確解析它。

3

使用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]') 
0

您不能使用BULK INSERT的表變量。因爲你已經創建瞭如下的臨時表。

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') 

你可以試試這個。它可能會幫助你。