简体   繁体   English

varchar值的转换溢出了sql server 2012中的int列

[英]The conversion of the varchar value overflowed an int column in sql server 2012

I'm getting an error with a query to get data... The error message is: Msg 248, Level 16, State 1, Line 1: The conversion of the varchar value overflowed an int column... I cant resolve this problem, so if any one can help me, thanks in advance, Here is My Sql: 我得到一个错误的查询来获取数据...错误消息是:消息248,级别16,状态1,行1:varchar值的转换溢出int列...我无法解决此问题,所以如果有人可以帮助我,提前谢谢,这是我的Sql:

This happens when I inserted 3 new joins in the query, I made them BOLD, otherwise it works perfectly... 当我在查询中插入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);

As Commented by @TI 由@TI评论

The varchar col is implicitly converted to an int and is overflowing (ie is >larger than 2,147,483,647). varchar col隐式转换为int并且溢出(即>大于2,147,483,647)。 To resolve this try casting the columns to bigint 要解决此问题,请尝试将列转换为bigint

you can cast column value data type as 您可以将列值数据类型转换为

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

But if you will get a varchar than it will fail, with error So it is better to change your DB schema. 但是如果你得到一个varchar而不是失败,那么就会出错。所以最好更改你的数据库架构。 Use this approach only if you are sure that only numeric string will be present. 仅当您确定只存在数字字符串时才使用此方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM