一尘不染

使用BULK INSERT在SQL Server上插入一个空字符串

sql

示例表包含字段Id(表的标识,整数);Name(一个允许空值的简单属性,它是一个字符串)

我正在尝试包含以下内容的CSV:

1,

1,”“

1,’‘

由于批量插入,它们都没有给我一个空字符串。我正在使用SQL Server 2012。

我能做些什么?


阅读 133

收藏
2021-05-23

共1个答案

一尘不染

据我所知,批量插入不能插入空字符串,它可以保留null值,也可以使用带有keepnulls选项或不带有keepnulls选项的默认值。对于您的3个样本记录,在插入数据库之后,它应类似于:

    | id    |  name 
    | 1     |  NULL 
    | 1     |  ""   
    | 1     |  ''

原因是,批量插入会将您的第一行,第二列的值视为空;对于其他2行,将第二列的值设为非null,并保持原样。

您可以让具有默认值的表列作为空字符串,而不是让Bulk Insert为您插入空字符串值。

示例如下:

CREATE TABLE BulkInsertTest (id int, name varchar(10) DEFAULT '')



批量将相同的CSV文件插入表格


BULK INSERT Adventure.dbo.BulkInsertTest
   FROM '....\test.csv'
   WITH 
      (
         FIELDTERMINATOR ='\,',
         ROWTERMINATOR ='\n'
      )
   SELECT * FROM BulkInsertTest

结果将如下所示:(CSV的第一行将获得一个空字符串)

    | id | name 
    | 1 |   
    | 1 | ""   
    | 1 | ''
2021-05-23