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