我正在尝试使用下面的代码将列类型更新为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
我做错了什么?
答案 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';
不要混淆NULL
和0
。它们不是一回事。
如果这是唯一的问题,那么您可以这样做:
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