首页 > 解决方案 > 使用 BULK INSERT 插入空格而不是 NULL

问题描述

我正在使用 BULK INSERT 将多个寄存器插入到已经有数据的数据库中。我想知道是否有任何方法可以插入空格而不是 NULL,因此插入的数据在视觉上与之前的数据一致。这是我正在使用的脚本。

BULK INSERT Documentos
FROM '\\Cate-des-tn-032\2015\InsertAWeb_07-05-2019.csv'
WITH (
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '\n'
)

UPDATE Documentos
    SET FechaCargaLote = CONVERT(VARCHAR(50), GETDATE(), 120)
    WHERE FechaCarga LIKE '%2015%'

标签: sqlsql-server

解决方案


这是使用临时表的场景。首先将所有数据加载为 VarChar()。然后根据需要插入到您的实际表中并进行转换。

设置表:

Create Table #staging_tbl
(
id VarChar(5),
dt VarChar(15)
)

Create Table #actual_tbl
(
id Int,
dt VarChar(10)
)

示例文件 [test.txt]

1;2019-05-12
1;2019-05-11
1;2019-05-10
1;
1;2019-05-08
2;2019-04-19

批量插入

BULK INSERT #staging_tbl
FROM 'c:\Downloads\test.txt' 
WITH 
(
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '\n'
)

将数据从临时表移动到实际表:将 NULL 转换为“空白”

Insert Into #actual_tbl
SELECT 
  id,
  Case When dt Is Null Then '' Else dt End As d
FROM #staging_tbl

查询实际表

Select * From #actual_tbl

结果:

id  dt
1   2019-05-12
1   2019-05-11
1   2019-05-10
1   
1   2019-05-08
2   2019-04-19

推荐阅读