"Arithmetic overflow error converting expression to data type nvarchar."
"Arithmetic overflow error converting expression to data type nvarchar."
我正在尝试比较 2 个表之间的数据,我需要将多个列作为复合键连接起来以获得唯一标识符。我正在使用 CTE,我的代码是:
WITH SuburbDataTest AS (
SELECT *
, CAST(Address AS NVARCHAR(100))+' ' +CAST(LivingAddress AS NVARCHAR(2))
+ ' ' + CAST(StartDate AS NVARCHAR(11))+ ' ' +CAST(AddressTypeId AS NVARCHAR(1))
+ ' ' +CAST(SuburbId AS NVARCHAR(1))AS SuburbDataTestColumn
FROM [mig].[ConsumerAddressMigration]
WHERE SuburbId is NOT NULL
)
SELECT *
FROM SuburbDataTest staging
WHERE SuburbDataTestColumn IN (
SELECT Address+' ' +CAST(LivingAddress AS NVARCHAR(2))+ ' '+CAST(StartDate AS NVARCHAR(11))
+ ' ' +CAST(AddressTypeId AS NVARCHAR(1))+ ' ' +CAST(SuburbId AS NVARCHAR(1)) AS SuburbDataTestColumn
FROM [dbo].[tblConsumerAddress]
)
不幸的是我得到了
Arithmetic overflow error converting expression to data type nvarchar.
有什么想法吗?
当您将数字转换为字符串并且字符串不够大时会发生这种情况。我猜这是问题所在:
CAST(SuburbId AS NVARCHAR(1))
如果 SuburbId
是一个大于 9 的数字,那么这将产生一个错误。或者,就此而言,如果值为负,您也会得到相同的错误。
我正在尝试比较 2 个表之间的数据,我需要将多个列作为复合键连接起来以获得唯一标识符。我正在使用 CTE,我的代码是:
WITH SuburbDataTest AS (
SELECT *
, CAST(Address AS NVARCHAR(100))+' ' +CAST(LivingAddress AS NVARCHAR(2))
+ ' ' + CAST(StartDate AS NVARCHAR(11))+ ' ' +CAST(AddressTypeId AS NVARCHAR(1))
+ ' ' +CAST(SuburbId AS NVARCHAR(1))AS SuburbDataTestColumn
FROM [mig].[ConsumerAddressMigration]
WHERE SuburbId is NOT NULL
)
SELECT *
FROM SuburbDataTest staging
WHERE SuburbDataTestColumn IN (
SELECT Address+' ' +CAST(LivingAddress AS NVARCHAR(2))+ ' '+CAST(StartDate AS NVARCHAR(11))
+ ' ' +CAST(AddressTypeId AS NVARCHAR(1))+ ' ' +CAST(SuburbId AS NVARCHAR(1)) AS SuburbDataTestColumn
FROM [dbo].[tblConsumerAddress]
)
不幸的是我得到了
Arithmetic overflow error converting expression to data type nvarchar.
有什么想法吗?
当您将数字转换为字符串并且字符串不够大时会发生这种情况。我猜这是问题所在:
CAST(SuburbId AS NVARCHAR(1))
如果 SuburbId
是一个大于 9 的数字,那么这将产生一个错误。或者,就此而言,如果值为负,您也会得到相同的错误。