BCP:保留空值为' \ N'

时间:2015-05-08 20:52:54

标签: mysql database sql-server-2008 bcp

必须将表从 MS SQL Server 移动到 MySQL (~8M行,包含8个颜色)。其中一个coloumns(DECIMAL Type)导出为空字符串,"bcp"导出到csv文件。当我使用此csv文件将数据加载到MySQL表时,它无法说"不正确的十进制值"。 寻找可能的工作或建议。

1 个答案:

答案 0 :(得分:1)

我会在MS SQL中创建一个视图,将十进制列转换为varchar列:

CREATE VIEW MySQLExport AS
SELECT [...]
    COALESCE(CAST(DecimalColumn AS VARCHAR(50)),'') AS DecimalColumn
FROM SourceTable;

然后,导入MySQL中的临时表,并使用CASE语句进行最终的INSERT:

INSERT INTO DestinationTable ([...])
SELECT [...]
    CASE DecimalColumn
        WHEN '' THEN NULL
        ELSE CAST(DecimalColumn AS DECIMAL(10,5))
    END AS DecimalColumn,
    [...]
FROM ImportMSSQLStagingTable;

这是安全的,因为导出文件中值可以是空字符串的唯一方法是它是否为NULL。

请注意,我怀疑你可以通过COALESCE(CAST(DecimalColumn AS VARCHAR(50)),'\N')导出它来作弊,因为LOAD INFILE会将其视为'\N',这与\N不同。