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

does conversion of varchar(MAX) columns to int result in data loss

我在 SQL 服务器 table 中有一个 'varchar(MAX)' 数据类型列,我想将其更改为 'int' 数据类型。会不会导致数据丢失

从SQL服务器documentation可以发现最大的bigint值是9,223,372,036,854,775,807,即宽度为19个字符的数字。另一方面,varchar(max) 可以比 19 个字符宽得多。因此,如果您的文本数据的数字大于此最大 int 值,则强制转换会溢出 int 列。

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

 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

Try_Convert 函数将 return 当值不可转换为 Int 时为 Null。