我在两个不同的服务器上有两个相同的数据库。如果我在一台服务器(版本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类型。有没有想过两者之间的差异?
答案 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