2015-06-27 81 views
2

我在两台不同的服务器上有两个相同的数据库。如果我在一台服务器(10.50.2795.0版)上运行下面的查询运行良好,如果我的第二台服务器上运行它(10.50.6000.34版)它提供了一个错误:用bigint算术溢出

Arithmetic overflow error converting expression to data type 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。任何关于两者之间的差异的想法?

+0

我猜想在第二个服务器上,其中一个表的meta_prompt_id声明为整数。 –

+0

当你说“相同”时,你是什么意思?您是否断开了所有用户的连接,并在一台服务器上备份了数据库,然后在第二台服务器上恢复了该备份?如果是这种情况,则查询应该在两台服务器上工作(或不工作)。既然你说查询在第一台服务器上工作,但不能在第二台服务器上工作,这意味着数据库不相同。那么,他们有什么不同?他们有相同的模式吗?他们有相同的数据吗? –

回答

0

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

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

1

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