2017-11-09 8 views
0

私は学生ですので、CSVファイルを変更することはできません。それもコード化されなければならず、 "特別なツール"は許されません。私は、SQLでこれらのステートメントを持っている:SQL Server Management Studioでは、csvファイルからバルクを挿入するときに、テーブルの最初の列を無視するにはどうすればよいですか?

スキーマとテーブルの作成:CSVファイルから一括挿入に

CREATE SCHEMA IA; 
GO 

CREATE TABLE IA.CONTACTS 
(
    CONT_GUID UNIQUEIDENTIFIER PRIMARY KEY NOT NULL, 
    CONT_FNAME VARCHAR(100) NOT NULL, 
    CONT_LNAME VARCHAR(100) NOT NULL, 
    CONT_DOB DATE, 
    CONT_CALLS INTEGER 
); 

試み:

BULK INSERT IA.IA.Contacts 
FROM 'C:\Users\k20\Desktop/IA.CONTACTS.csv' 
WITH 
    (FIRSTROW = 2, 
    KEEPIDENTITY, 
    FIELDTERMINATOR = ',', 
    ROWTERMINATOR = '\n'); 

私はこのエラーを取得する:

Msg 4864, Level 16, State 1, Line 3
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (CONT_GUID).

Msg 4864, Level 16, State 1, Line 3
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 3, column 1 (CONT_GUID).

.... and so on, for every row in the csv file

私はcsvファイルに4列ありますが、私のテーブルには5列あります。テーブルの最初のものを無視するには、CONT_GUID

EDIT:

CONT_FNAME CONT_LNAME CONT_DOB CONT_CALLS 
Mary May 1/25/1980 2 
John James 1/13/1978 3 
Martin Merriweather 4/25/1988 1 
James Johns 6/13/1990 1 
Jerry Jacobs 11/11/1996 1 
Madelyn Mace 3/30/1995 2 
Bruce Blake 1/30/1970 4 
Brian Brown 12/4/1980 2 
Charlie Childress 2/13/1987 3 
Ray Rhodes 12/23/1989 1 
William Willis 11/13/1985 1 
Herman Hughes 3/1/1980 2 
Steve Stevens 5/12/1984 2 
Daryl Dixon 9/25/1983 3 
Abe Avery 8/24/1987 5 
Kevin Carlyle 10/15/1975 3 
Sean Shaffer 10/25/1977 3 
Peter Piper 8/6/1974 3 
Oscar Oosker 7/2/1973 2 
Tom Townsend 6/6/1965 1 
Victor Vaughn 6/13/1966 1 
Nick Nice 7/12/1968 1 
Sally Soose 6/12/1984 1 
June Johnson 12/16/1984 1 

それはcsvファイルから直接です。セパレータには空白のないカンマが使用されます。

+0

である必要があり、また、あなたからいくつかのサンプル行を追加することができますCSVファイルですか? –

+0

ファイルがそれほど大きくない場合は、4列のステージング表にロードし、sqlを作成して、挿入する4列を指定して最終表に移動します。 –

答えて

0

4つの列を持つステージングテーブルにロードし、sqlを作成して最後のテーブルに挿入し、挿入する4つの列を指定します。

私はあなたが上記の持っている、しかし、あなたは(NEWIDを指定しているユニークな識別構文を知らないが)働くので、次は完全な答え

CREATE TABLE IA.CONTACTS 
(
CONT_GUID UNIQUEIDENTIFIER NOT NULL, 
CONT_FNAME VARCHAR(100) NOT NULL, 
CONT_LNAME VARCHAR(100) NOT NULL, 
CONT_DOB DATE, 
CONT_CALLS INTEGER 
) 

BULK INSERT 
IA.IA.Staging_Contacts 
    FROM 'C:\Users\k20\Desktop/IA.CONTACTS.csv' 
    WITH 
     ( 
     FIRSTROW=2, 
     KEEPIDENTITY, 
     FIELDTERMINATOR =',', 
     ROWTERMINATOR ='\n' 
    ); 

insert into contacts (CONT_GUID,CONT_FNAME ,CONT_LNAME,CONT_DOB,CONT_CALLS) 
select newid(),CONT_FNAME ,CONT_LNAME,CONT_DOB,CONT_CALLS 
from staging_contacts 
+0

ありがとう、私はこれを試して、それは長いエラーを取り除いた。しかし、今私はこれを得る: "列 'CONT_GUID'、テーブル 'IA.IA.CONTACTS'に値NULLを挿入することはできません;列はNULLを許可しません。 CONT_GUIDは一意の識別子でなければなりません。レコードごとに新しいIDを自動的に設定する方法はありますか? –

+0

私はそれを修正しました。私はステージングテーブルから選択するときにNewID()を使用しました。 –

+0

ok cool、私は上記のアイデンティティ列を使って追加しました –

0

一括挿入でフィールドを無視することはできません。すべてのフィールドをロードし、必要のない列の値を削除または削除するか、またはすべてのフィールドをステージングテーブルにロードし、ステージングテーブルを変更し、

関連する問題