算术溢出使用bigint

时间:2015-06-27 02:17:40

标签: sql-server sql-server-2008

我在两个不同的服务器上有两个相同的数据库。如果我在一台服务器(版本10.50.2795.0)上运行下面的查询它运行正常,如果我在第二台服务器(版本10.50.6000.34)上运行它会出错:

  

将表达式转换为数据类型int的算术溢出错误。

查询是:

SELECT  min(date_time), 
MAX(date_time), count(*), 'meta_prompt'
FROM    event               evt
INNER JOIN
    prompt_event            prmt
ON  evt.event_id    =       prmt.event_id   
INNER JOIN
    meta_prompt         metp
ON  prmt.meta_prompt_id     =   metp.meta_prompt_id 

加入字段" meta_prompt_id"是BIGINT类型。有没有想过两者之间的差异?

2 个答案:

答案 0 :(得分:1)

计数操作,默认情况下,SQL Server会尝试将输出转换为Integer数据类型。我假设,在您的情况下,此查询返回的记录总数超过了整数的最大上限值(2,147,483,647)。您可以尝试使用COUNT_BIG函数而不是COUNT。

答案 1 :(得分:0)

运行以下查询以验证两台服务器上的所有数据类型是否相同...对于您要加入的列名称。

SELECT TABLE_CATALOG , TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ( N'event_id' ,  N'meta_prompt_id' )
ORDER BY TABLE_NAME, COLUMN_NAME

如果你发现一个列具有不兼容的数据类型(int而不是bigint作为一个评论者建议的最可能的罪魁祸首)...使用我在下面的问题中的答案来改变数据类型。

MS SQL Database with 10m rows, convert varchar to int on column