【问题标题】:When converting a string column to int column, I am getting error "conversion failed when converting the varchar value 'NULL' to data type int."将字符串列转换为 int 列时,出现错误“将 varchar 值 'NULL' 转换为数据类型 int 时转换失败。”
【发布时间】:2017-01-04 01:13:12
【问题描述】:

我正在尝试使用下面的代码将列类型更新为 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

我做错了什么?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我想你在找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;

【讨论】:

  • 谢谢!!只是代码的“更新”部分的更新,我认为我们需要在“Salesrepemployeenumber = ......”之前使用“SET”,但整个事情对我来说完全有效。
  • @AmitSinghParihar 。 . .接得好。非常感谢。
【解决方案2】:

只是以 Gordon 的回答 (+1) 为基础,

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

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

【讨论】:

    【解决方案3】:

    您可以先修复无效数据,而不是更改列

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

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多