2014-06-27 26 views
3

我得到一個錯誤與查詢得到的數據int列...該錯誤消息:消息248,級別16,狀態1,行: varchar值的轉換溢出int列... 我無法解決這個問題,所以如果任何人可以幫助我,在此先感謝,這裏是我的SQL:將varchar值的轉換溢出SQL Server 2012中

這發生在我插入3個新的聯接查詢時,我讓他們大膽,否則它完美...

SELECT DISTINCT 
    ACR_ART_ID, DES_TEXTS.TEX_TEXT AS CRITERIA_DES_TEXT, 
    COALESCE(DES_TEXTS2.TEX_TEXT, ACR_VALUE) AS CRITERIA_VALUE_TEXT, 
    (DES_TEXTS.TEX_TEXT + ': ' + COALESCE(DES_TEXTS2.TEX_TEXT, ACR_VALUE)) AS CEL_OPIS 
FROM    
    Inventory.dbo.ARTICLE_CRITERIA 
LEFT JOIN 
    Inventory.dbo.DESIGNATIONS AS DESIGNATIONS2 ON DESIGNATIONS2.DES_ID = ACR_KV_DES_ID 
LEFT JOIN 
    Inventory.dbo.DES_TEXTS AS DES_TEXTS2 ON DES_TEXTS2.TEX_ID = DESIGNATIONS2.DES_TEX_ID 
LEFT JOIN 
    Inventory.dbo.CRITERIA ON CRI_ID = ACR_CRI_ID 
LEFT JOIN 
    Inventory.dbo.DESIGNATIONS ON DESIGNATIONS.DES_ID = CRI_DES_ID 
LEFT JOIN 
    Inventory.dbo.DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID 
INNER JOIN 
    Inventory.dbo.ART_LOOKUP al ON ARTICLE_CRITERIA.ACR_ART_ID = al.ARL_SEARCH_NUMBER 
    AND al.ARL_KIND in (1,3) 
INNER JOIN 
    Inventory.dbo.ARTICLES a ON al.ARL_ART_ID = a.ART_ID and (a.ART_SUP_ID=21 or a.ART_SUP_ID=11091) 
INNER JOIN 
    Inventory.dbo.SUPPLIERS ON SUPPLIERS.SUP_ID = ART_SUP_ID** 
WHERE 
    (DESIGNATIONS.DES_LNG_ID IS NULL OR DESIGNATIONS.DES_LNG_ID = 25) 
    AND (DESIGNATIONS2.DES_LNG_ID IS NULL OR DESIGNATIONS2.DES_LNG_ID = 25); 
+0

ü可以查身份證的最大值在表 – Azar

+0

查詢不出來的大膽的一部分,但在看編輯我認爲這應該是最後三個連接。你可以一次添加一個,讓人們知道哪一個使查詢失敗,然後檢查那裏的varchar字段,這可能是int的情況(查看它的值是否明顯超出範圍)。然後可能使用不同類型的顯式強制轉換來使查詢工作。 – mc110

+3

聽起來好像至少有一個連接將'varchar' col連接到'int' col。 'varchar' col被隱式轉換爲'int'並溢出(即大於2,147,483,647)。爲了解決這個問題,試試將這些列轉換爲'bigint'。將設計重構爲沒有商店整數作爲字符串也是值得的。 –

回答

4

正如評論說@TI

將varchar COL被隱式轉換爲int並溢出(即大於2,147,483,647)。要解決此嘗試鑄造列BIGINT

你可以施放列值的數據類型爲

select cast(max(columnname) AS bigint)+1 from atable ; 

但是如果你會得到一個varchar比它會失敗, 錯誤 所以最好改變你的數據庫模式。 只有當您確信只有數字字符串存在時才使用此方法。

相關問題