January 20, 2019 at 4:17 am
I have a scenario were in a table has 5 columns, but data (CSV) file has 2 columns of data. Because the 1st column is an Identity column, 4th & 5th are having default constraint. So these columns don't need value from CSV. Please note CSV will always have all values (rows and columns in double quotes)
I tried to skip the 1st column by referring to this link: https://docs.microsoft.com/en-us/sql/relational-databases/import-export/use-a-format-file-to-skip-a-table-column-sql-server?view=sql-server-2017 but seems I am missing something, because on executing bulk insert command I get an error: Cannot bulk load CSV file. Invalid terminator is specified for source column number 2 in the format file "C:\MyData\Demo1_Format.fmt". All source column terminators must be the same except the last one when CSV format is specified. Only row terminator should be different.
Update when I remove Format = 'CSV' parameter and keep format file as it is then it works. But I need the format parameter because it has several benefits like handling double quotes, line break, special characters issues within data. So can't I use both, format file to skip columns and format='CSV' parameters for handling data issues?
CREATE table dbo.test1
(
[UniqueID] [bigint] IDENTITY(1,1),
[Id] char (1) NOT NULL,
[Name] [varchar] (50) NOT NULL,
[IsDelete] [tinyint] NULL DEFAULT 0,
[Rootpid] VARCHAR(25)NULL CONSTRAINT defVal_RootPid_TEST1 DEFAULT '20190110035929_x9zh5'
);
BULK INSERT dbo.test1 from 'C:\MyData\Demo1.csv'
WITH (FORMAT = 'CSV', FIRSTROW = 2, FormatFile = 'C:\MyData\Demo1_Format.fmt')
Demo1_Format.fmt
14.0
3
1 SQLCHAR 0 0 "\"" 0 "" ""
2 SQLCHAR 0 9999 "\",\"" 2 Id ""
3 SQLCHAR 0 9999 "\"\r\n" 3 Name ""
Demo1.csv
"Id","Name"
"1","James"
"2","Scott"
January 21, 2019 at 11:02 pm
While you may consider it to be an extra step (and it is), I never import directly into a final table anyway. I always import into a staging table to do validations and then I'll insert into the final table.
Now, if you absolutely must insert into the final table directly, just create a view on the table with the columns you want and import into that instead.
As a bit of a sidebar, it's a real shame that they didn't take this improvement a bit farther.
--Jeff Moden
Change is inevitable... Change for the better is not.
Viewing 2 posts - 1 through 2 (of 2 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy