【问题标题】:Bulk Insert how to skip column using format file in SQL Server 2017批量插入如何在 SQL Server 2017 中使用格式文件跳过列
【发布时间】: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


【解决方案1】:

你能试试这个格式文件吗:我认为新的 Format=CSV 选项确实认为格式文件不再需要这样做......

14.0
2
1       SQLCHAR             0       1       ","      2     Id           SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR             0       50      "\r\n"   3     Name         SQL_Latin1_General_CP1_CI_AS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多