【问题标题】:"Arithmetic overflow error converting expression to data type nvarchar."“将表达式转换为数据类型 nvarchar 时出现算术溢出错误。”
【发布时间】:2020-02-21 00:42:35
【问题描述】:

我正在尝试比较 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]
)

不幸的是我得到了

将表达式转换为数据类型 nvarchar 时出现算术溢出错误。

有什么想法吗?

【问题讨论】:

  • 我们能看到 [mig].[ConsumerAddressMigration] 和 [dbo].[tblConsumerAddress] 的架构吗?

标签: sql sql-server overflow common-table-expression sqldatatypes


【解决方案1】:

当您将数字转换为字符串时会发生这种情况 - 并且字符串不够大。我猜这是问题所在:

CAST(SuburbId AS NVARCHAR(1))

如果SuburbId 是一个大于 9 的数字,那么这将产生错误。或者,如果该值为负数,您也会得到同样的错误。

【讨论】:

  • 呃!我真是瞎了眼!真的很感谢@Gordon Linoff!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多