2013-01-01 31 views
7

Tôi đang cố gắng chèn một CSV vào một bảng tạm thời và câu lệnh SQL này dường như không hoạt động.Có gì sai với câu lệnh SQL này cho việc chèn hàng loạt biến số

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

Bắt lỗi sau ....

Incorrect syntax near '@TempTable'.

+2

Bạn không thể sử dụng biến bảng, bạn cần bảng thực khi sử dụng 'BULK INSERT' –

+0

@rs. khá chắc chắn đó không phải là sự thật – Woot4Moo

+1

@ Woot4Moo mà một phần? Bạn có thể giải thích? Và bạn có thể đăng câu trả lời làm thế nào để làm chèn vào biến bảng, không sử dụng bảng temp như bạn đã làm trong câu trả lời của bạn? –

Trả lời

13

Bạn không thể BULK INSERT vào một biến bảng. Vì vậy, dòng này:

BULK INSERT @TempTable 

Điều gì gây ra lỗi.


FYI, cách khắc phục đơn giản nhất có thể là chỉ sử dụng bảng #Temp thay vì biến bảng. Vì vậy, mã SQL của bạn sẽ thay đổi như thế này:

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

Tôi nghĩ rằng bạn muốn làm một cái gì đó như thế này:

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

gì bạn đang làm là cố gắng để buộc một biến thành một câu lệnh SQL không động . Vì vậy, trình biên dịch/thông dịch viên (không chắc chắn đó là thuật ngữ chính xác cho SQL) là bom ra vì nó không thể phân tích cú pháp nó đúng cách.

3

Bạn không thể sử dụng biến bảng khi sử dụng BULK INSERT

Bạn có thể thử này

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

bạn không thể sử dụng chèn số lượng lớn cho biến bảng. cho rằng bạn đã tạo bảng tạm thời như dưới đây.

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

bạn có thể thử Cái này. nó có thể giúp bạn.

Các vấn đề liên quan