我有一个数据电子表格,基本上是PART_ID和SPECS。 SPECS字段是一个大字符串,当导入临时表时,存储为NVARCHAR(255)。
示例:
'小部件','这部分需要在切割前加热到400度。'
我们的ERP系统必须考虑的最终表格将SPECS存储为二进制字段。
如果我执行以下操作,我会得到二进制转换:
INSERT INTO ERP_PART_TABLE (PART_ID, SPEC)
SELECT PART_ID, CONVERT(VARBINARY(MAX), SPEC) FROM TEMP_TABLE;
然而,当我进入ERP系统时,我看到的只是第一个角色,我得到一个报告告诉我系统遇到了一些奇怪的角色。
我在过去使用不同转化格式的转化中看到过这种情况,例如:
INSERT INTO ERP_PART_TABLE (PART_ID, SPEC)
SELECT PART_ID, CONVERT(VARBINARY(MAX), SPEC, 1) FROM TEMP_TABLE;
但是,当我尝试使用该格式转换进行选择时,我得到了
'消息8114,级别16,状态5,行1错误转换数据类型 nvarchar到varbinary。'
我尝试了TRY_CONVERT(varbinary(max), bits, 1)
,结果一直是NULL。
我原始文本字段中是否有某些特殊字符,我没有看到? (仅仅是为了测试,我也尝试了selecting CONVERT(VARBINARY(MAX), 'Hello',1)
,我仍然得到错误。)
SQL * Server 2012。
答案 0 :(得分:0)
如果您对Null Literal或\0
有问题,这可能会有所帮助。下面的代码将删除它们。
SELECT
PART_ID,
CONVERT(VARBINARY(MAX), REPLACE(SPEC COLLATE Latin1_General_BIN, NCHAR(0x00) COLLATE Latin1_General_BIN ,'') , 1)
FROM TEMP_TABLE;