Sql Server 忽略更新错误
Posted
技术标签:
【中文标题】Sql Server 忽略更新错误【英文标题】:Sql Server Ignore update errors 【发布时间】:2009-01-15 10:43:45 【问题描述】:我继承了一个非常旧的数据库,需要更新一些数据。每行都有一列,其 UniqueID 看起来像 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。
有什么方法可以忽略出错的行并继续更新其他行?
【问题讨论】:
【参考方案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'
-江户
【讨论】:
【参考方案2】:我不确定您为什么要麻烦转换为 int。为什么不只对最后三位数字进行字符串比较。此外,您正在做 - substring(id, 3, 3)。
我假设您已经简化了上面的 sn-p 以使其更易于阅读,并且您已经先提取了 39612?
我建议如下:
where UniqueID like '%612'
【讨论】:
以上是关于Sql Server 忽略更新错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 SQL Server 查询优化器有时会忽略明显的聚集主键?