Synapse中nvarchar转int失败:未指定转换却报错
解决Synapse中"Conversion failed when converting nvarchar to int"无显式转换的报错
核心排查与解决步骤
虽然你已显式将MeldGrp转换为NVARCHAR,但报错根源几乎都是隐性类型转换导致的,具体操作如下:
检查事实表目标列类型
直接查看事实表MeldingGroepId的结构,确认它是否被误定义为INT类型。如果是,将其修改为与源表一致的NVARCHAR类型(注意匹配长度,比如源表是NVARCHAR(50)则设为相同长度)。验证Union分支的列类型一致性
即使两个源表该列都是NVARCHAR,也要确认Union操作时的列类型完全匹配:- 单独执行两个分支的SQL,用以下语句检查转换后列的实际类型:
SELECT SQL_VARIANT_PROPERTY(CAST([MeldGrp] AS NVARCHAR), 'BaseType') AS ColumnType FROM [第一个源表] SELECT SQL_VARIANT_PROPERTY(CAST([MeldGrp] AS NVARCHAR), 'BaseType') AS ColumnType FROM [第二个源表] - 排查是否有分支存在隐性转换逻辑(比如某个分支的CAST语句写错为
CAST(... AS INT),或者源表是视图/计算列,内部隐含了类型转换)。
- 单独执行两个分支的SQL,用以下语句检查转换后列的实际类型:
显式指定NVARCHAR转换长度
你的CAST([MeldGrp] AS NVARCHAR)未指定长度,Synapse会默认使用NVARCHAR(30),如果源表列长度更长,可能导致截断或触发隐性转换。修改为与源表匹配的长度,例如:CAST([MeldGrp] AS NVARCHAR(255)) AS MeldingGroepId排查写入时的关联逻辑
如果写入事实表时存在与其他表(比如维度表)的关联操作,确认关联字段的类型是否一致——若维度表对应字段是INT,会触发隐性转换导致报错。
内容的提问来源于stack exchange,提问作者Rikpro43 2
相关产品推荐
相关产品推荐

