我继承了一个非常古老的数据库,需要更新一些数据。每行都有一列,其唯一ID看起来像C0042-45-39612。代码的最后3个数字是类别Id(在这种情况下为612)。
我需要进行仅针对某些类别的更新,并且我正在使用此SQL语句
UPDATE WebbikesProducts SET Price = Price * 1.05 WHERE Convert( Integer, SubString( UniqueID, 3, 3 )) = 125
这里显而易见的问题是,如果唯一代码最后没有3个数字?嗯,这正是我遇到的问题,因为并非所有项目都被分类或具有唯一的数字,如C0049-307-1CHROME。
我无法访问数据库(我从asp页面调用它)所以我不想创建存储过程。数据库是SQL 2000。
有没有办法忽略有错误的行并继续更新其他行?
答案 0 :(得分:1)
我不确定你为什么要打算转换成int。为什么不对最后三位数进行字符串比较。此外,你正在做 - substring(id,3,3)。
我假设你已经简化了上面的代码片段以便于阅读并且你已经首先提取了39612?
我建议如下:
where UniqueID like '%612'
答案 1 :(得分:1)
试试这个:
UPDATE WebbikesProducts
SET Price = Price * 1.05
WHERE ISNUMERIC(SubString( UniqueID, 3, 3 )) = 1
AND Convert( Integer, SubString( UniqueID, 3, 3 )) = 125
甚至更简单:
UPDATE WebbikesProducts
SET Price = Price * 1.05
WHERE SubString( UniqueID, 3, 3 ) = '125'
-Edo