【发布时间】:2019-06-14 00:22:38
【问题描述】:
我有一个场景,表中有 5 列,但数据 (CSV) 文件只有 2 列数据。因为第 1 列是 Identity 列,所以第 4 和第 5 列具有默认约束。所以这些列不需要来自 CSV 的值。请注意 CSV 将始终包含所有值(双引号中的行和列)
我试图通过引用此链接跳过第一列: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 但似乎我遗漏了一些东西,因为在执行批量插入命令时我得到一个
无法批量加载 CSV 文件。在格式文件“C:\MyData\Demo1_Format.fmt”中为源列号 2 指定了无效的终止符。当指定 CSV 格式时,所有源列终止符必须相同,除了最后一个。只有行终止符应该不同
我的代码:
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'
);
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"
T-SQL:
BULK INSERT dbo.test1 from 'C:\MyData\Demo1.csv'
WITH
(FORMAT = 'CSV',
FIRSTROW = 2,
FORMATFILE = 'C:\MyData\Demo1_Format.fmt')
更新,当我删除 Format = 'CSV' 参数并保持格式文件原样时,它就可以工作了。但我需要格式参数,因为它有几个好处,比如处理双引号、换行符、数据中的特殊字符问题。那么我不能同时使用格式文件来跳过列和格式='CSV'参数来处理数据问题吗?
【问题讨论】:
-
你是说格式文件吧?它仍然给出同样的错误。即使值为 0 / 1
-
对不起,我一输入就意识到了。
-
也许给该行相同的列终止符?即使被忽略。
-
This is what I Kept now 1 SQLCHAR 0 0 "\",\"" 0 "" " " 现在错误是无法从 OLE DB 提供程序“BULK”获取所需的接口(“IID_IColumnsInfo”)对于链接服务器“(null)”。
-
尝试使用十六进制 ASCII 值作为双引号?所以
"0x22,0x22"或"0x220x2C0x22"。
标签: sql-server bulkinsert