将varchar(MAX)列转换为int会导致数据丢失

时间:2018-02-25 09:07:14

标签: sql sql-server-2008-r2

我有一个' varchar(MAX)' SQL Server表中的数据类型列,我想将其更改为' int'数据类型。是否会导致数据丢失。

2 个答案:

答案 0 :(得分:0)

从SQL Server documentation,我们可以发现最大的bigint值是9,223,372,036,854,775,807,即宽度为19个字符的数字。另一方面,varchar(max)可以大大超过19个字符。因此,如果您的文本数据的数字大于此max int值,则转换将溢出int列。

答案 1 :(得分:0)

这将导致数据丢失取决于该列中的现有值。你可以测试它,如下所示 -

 declare @tmp_tbl table (col_1 varchar(max))

 insert into @tmp_tbl (col_1)
 select '12345'
 union all
 select '1098.98'
 union all
 select 'abcde'
 union all
 select '2147483647'
 union all
 select '2147483648'

 select try_convert(int, col_1)
 from @tmp_tbl
当值无法转换为Int时,

Try_Convert函数将返回Null。