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

varchar值的转换溢出了sql server的int列,sql,sql-server,tsql,Sql,Sql Server,Tsql,varchar值“82332617284”的转换溢出了int列 我有以下数据: BreakID = 82332617284 因此,我有一行代码只提取数字,因此它看起来如下所示: join dst.ExceptionsDST d on f.BreakOwnerId = replace(substring(d.dstbreakid,charindex('=',d.dstbreakid) + 1,99),' ','') 我需要做些什么才能在不出错的情况下拉取数字并进行连接 这肯定是与这部分有关 r

varchar值“82332617284”的转换溢出了int列

我有以下数据:

BreakID = 82332617284
因此,我有一行代码只提取数字,因此它看起来如下所示:

join dst.ExceptionsDST d on f.BreakOwnerId = replace(substring(d.dstbreakid,charindex('=',d.dstbreakid) + 1,99),' ','')
我需要做些什么才能在不出错的情况下拉取数字并进行连接

这肯定是与这部分有关


replace(子字符串(d.dstbarkid,charindex('=',d.dstbarkid)+1,99),“,”)
int
对于您的数字来说,数据类型太小。您必须去掉这么大的数字,或者将列数据类型更改为
bigint

很明显,您的值是bigint。Int数据类型无法容纳它

例如,我试图插入int数据类型的值#t。将以同样的错误结束

create table #t (id int)
insert into #t values(82332617284)
但这不会出错,因为它是bigint

create table #t1 (id bigint)
insert into #t1 values(82332617284)
所以如果你能像下面这样修改你的代码会有帮助

join dst.ExceptionsDST d on  f.BreakOwnerId = CAST(replace(substring(d.dstbreakid,charindex('=',d.dstbreakid) + 1,99),' ','') as Bigint)

您可以使用
TRY\u CONVERT
来避免此错误:

SELECT dstbreakid, TRY_CONVERT(INT, SUBSTRING(d.dstbreakid, CHARINDEX('=', d.dstbreakid) + 1, 99))
FROM (VALUES
    ('x = 82332617284 '),
    ('x = 823326172 ')
) d(dstbreakid)
输出:

| dstbrakeid |(无列名)|
|-----------------|------------------|
|x=82332617284 |空|
|x=823326172 | 823326172|

如果
f.BreakOwnerId
是数据类型
int
,则它不能包含值
823326172

强制转换(您的列为BIGINT),如果您在该表达式上执行
JOIN
,将使服务器非常困难;因为这句话不可讽刺。就个人而言,我建议将该值设置为一个
持久化的
计算列,然后在新的(计算)列上执行您的
JOIN
。如果您随后进行相应的索引(您可以将索引放在
持久化的
列上),您可能会发现性能有了不错的提高。问题是
f
是否包含值
82332617284
?如果它是int,则不需要。您可能应该使用
数值
/
十进制
作为值。我注意到f.BreakwnerId列的表确实是int,因此您是对的-似乎有人骗了我一点。我在看数据等等。。thxError将数据类型varchar转换为bigint。