【问题标题】:Arithmetic overflow error converting expression to data type int?将表达式转换为数据类型 int 的算术溢出错误?
【发布时间】:2015-08-21 00:23:52
【问题描述】:

在此代码的第 1 行出现错误...

Select COUNT(MEM_REL) As MemberSub, CLM_CC2 As GroupNum
From Impact.dbo.tbl_mem, Impact.dbo.tbl_clm 
Where MEM_REL = '01'
Group by CLM_CC2

错误是:

MSg 8815, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int

【问题讨论】:

  • 因为你通过MEM_REL = '01'你必须通过MEM_REL = 1
  • 您在FROM 子句中缺少JOIN
  • 我在哪里加入 @GordonLinoff?
  • @tinka 与此无关。
  • 你真的不应该使用逗号分隔的表格列表。它有效,但它是一种非常古老的连接方式。您应该明确并声明您想要一个 CROSS JOIN。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…

标签: sql sql-server


【解决方案1】:

尝试为查询引入适当的关系,现在您将获得两个表的笛卡尔积。例如,代替逗号, 使用关键字JOIN 来连接两个表,然后定义要连接这些表的列的关系。

完成上述操作后,返回的行数将显着减少,并且以下查询可能会起作用,如果您在以下查询中有超过 22 亿行,那么您可能需要使用 COUNT_BIG() 函数而不是仅仅使用 @ 987654324@

Select COUNT(MEM_REL) As MemberSub
     , CLM_CC2 As GroupNum
From Impact.dbo.tbl_mem
INNER JOIN Impact.dbo.tbl_clm 
ON dbo.tbl_mem.[ReferencingColumn] = dbo.tbl_clm.[ReferencingColumn]
Where MEM_REL = '01'
Group by CLM_CC2

使用 COUNT_BIG() 查询

Select COUNT_BIG(MEM_REL) As MemberSub
     , CLM_CC2 As GroupNum
From Impact.dbo.tbl_mem
INNER JOIN Impact.dbo.tbl_clm 
ON dbo.tbl_mem.[ReferencingColumn] = dbo.tbl_clm.[ReferencingColumn]
Where MEM_REL = '01'
Group by CLM_CC2

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2023-03-15
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多