SQL不会使用BULK INSERT插入空值

ern*_*est 8 sql-server csv bulkinsert

我有一个CSV文件,每行看起来类似于:

EASTTEXAS,NULL,BELLVILLE AREA,NULL,BELLVILLE AREA,RGP,NULL,NULL,0,NULL,NULL,NULL,1,1,PM,PM Settings,NULL,NULL
Run Code Online (Sandbox Code Playgroud)

我在BULK INSERT上找不到关于如何处理NULL值的任何示例,所以我认为没问题.

当我尝试运行BULK INSERT时,它给了我这个错误:

消息4864,级别16,状态1,行28第1行第12列(ClassificationPK)的批量装入数据转换错误(指定代码页的类型不匹配或无效字符).

这是我的表,不是:

CREATE TABLE #Assets
(
ParentID VARCHAR(255) NULL,
ClassificationID VARCHAR(255) NULL,
AssetID VARCHAR(255) NULL,
AssetType VARCHAR(255) NULL,
AssetName VARCHAR(255) NULL,
RepairCenterID VARCHAR(255) NULL,
LaborID VARCHAR(255) NULL,
Owner VARCHAR(255) NULL,
IsLocation VARCHAR(255) NULL,
AssetTypeDesc VARCHAR(255) NULL,
ClassificationName VARCHAR(255) NULL,
ClassificationPK INT NULL,
IsUp BIT NULL,
RequesterCanView BIT NULL,
PMCycleStartBy VARCHAR(255) NULL,
PMCycleStartByDesc VARCHAR(255) NULL,
PMCycleStartDate DATETIME NULL,
PMCounter INT NULL,
ParentPK INT NULL,
ParentName VARCHAR(255) NULL,
AssetPK INT NULL,
RepairCenterPK INT NULL,
RepairCenterName VARCHAR(255) NULL,
LaborPK INT NULL)

BULK
INSERT #Assets
FROM '\\cdmsqlint01\drop\assets.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
KEEPNULLS
)
GO

SELECT * FROM #Assets

DROP TABLE #Assets
Run Code Online (Sandbox Code Playgroud)

关于我在这里做错了什么的想法?

Kri*_*ner 14

根据:

http://msdn.microsoft.com/en-us/library/ms187887.aspx

可以通过在文件中包含空字段来插入空值.

示例文件是:

1,,DataField3
2,,DataField3
Run Code Online (Sandbox Code Playgroud)

导入文件保留空值的示例方法是:

USE AdventureWorks;
GO
BULK INSERT MyTestDefaultCol2
FROM 'C:\MyTestEmptyField2-c.Dat'
WITH (
    DATAFILETYPE = 'char',
    FIELDTERMINATOR = ',',
    KEEPNULLS
);
GO
Run Code Online (Sandbox Code Playgroud)

当然,这意味着你必须改变你的"NULL" s到"",而你却想为空字符串将被解释为空的任何空字符串,但它可能是足以让你开始了吗?我想要保留你需要更改的空字符串列

field1,,field2
Run Code Online (Sandbox Code Playgroud)

field1,"",field2
Run Code Online (Sandbox Code Playgroud)

例如