将字符串列转换为int列时,我收到错误"转换varchar值时转换失败' NULL'数据类型int。"

时间:2017-01-04 01:13:12

标签: sql sql-server

我正在尝试使用下面的代码将列类型更新为int

Alter table Customers_Practice1
Alter column SalesRepEmployeeNumber int

它给出了错误"转换varchar值时转换失败' NULL'到数据类型int。"

从另一篇文章中,我意识到NULL被读取为字符串值而不仅仅是NULL,以下代码与select语句一起使用

Select Replace(SalesrepemployeeNumber,'NULL','0') from Customers_Practice1

但是当我尝试使用Alter语句使用下面的代码时,它没有用。

Alter table Customers_Practice1
Alter column (Select Replace(SalesRepEmployeeNumber,'NULL','0') 
as SalesRepEmployeeNumber from Customers_Practice1) int

我做错了什么?

3 个答案:

答案 0 :(得分:3)

我认为您正在寻找update

update Customers_Practice1
    SalesrepemployeeNumber = Replace(SalesrepemployeeNumber, 'NULL', '0')
    where SalesrepemployeeNumber like '%NULL%';

但是,如果要将字符串空值'NULL'设置为NULL

update Customers_Practice1
    set SalesrepemployeeNumber = NULL
    where SalesrepemployeeNumber = 'NULL';

不要混淆NULL0。它们不是一回事。

如果这是唯一的问题,那么您可以这样做:

Alter table Customers_Practice1
    Alter column int;

答案 1 :(得分:1)

只是建立在戈登的回答(+1)

之上

在运行ALTER TABLE之前,我会检查是否有其他转换失败。

Select *
 From  Customers_Practice1
 Where Try_Convert(int,SalesRepEmployeeNumber) is null

答案 2 :(得分:0)

你可以先修复无效数据,而不是改变列

UPDATE  Customers_Practice1 SET SalesRepEmployeeNumber=
      CASE WHEN ISNUMERIC(SalesRepEmployeeNumber)=1 THEN SalesRepEmployeeNumber ELSE 0 END 
GO
Alter table Customers_Practice1 Alter column SalesRepEmployeeNumber int