2015-06-27 131 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。