在 SQL Server Management Studio 中,如何在从 csv 文件批量插入时忽略 table 中的第一列?
In SQL Server Management Studio, how do I ignore the first column in a table when bulk inserting from a csv fle?
请记住我是学生,所以我不能修改csv文件。它也必须编码并且不允许 "special tools"。我在 SQL:
中有这些陈述
架构和table创建:
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
);
尝试从 csv 文件批量插入:
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 列,但 table 中有 5 列。如何忽略 table、CONT_GUID
中的第一个?
编辑:
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 文件。不带空格的逗号用作分隔符。
您不能忽略批量插入中的字段,建议加载所有字段并删除或删除您不需要的列中的值,或者将所有字段加载到暂存中 table,进行更改在暂存 table 并将其加载到最终 table(Target)
将它们加载到具有 4 列的暂存 table 中,然后创建一个 sql 以将它们插入到最终的 table 中,指定要插入的 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
请记住我是学生,所以我不能修改csv文件。它也必须编码并且不允许 "special tools"。我在 SQL:
中有这些陈述架构和table创建:
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
);
尝试从 csv 文件批量插入:
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 列,但 table 中有 5 列。如何忽略 table、CONT_GUID
中的第一个?
编辑:
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 文件。不带空格的逗号用作分隔符。
您不能忽略批量插入中的字段,建议加载所有字段并删除或删除您不需要的列中的值,或者将所有字段加载到暂存中 table,进行更改在暂存 table 并将其加载到最终 table(Target)
将它们加载到具有 4 列的暂存 table 中,然后创建一个 sql 以将它们插入到最终的 table 中,指定要插入的 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