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:忽略 AVG NULL 值

求大神解决sqlcmd执行sql文件忽略错误的问题

oledb 忽略 sql Anywhere-db 上的参数

为啥 SQL Server 查询优化器有时会忽略明显的聚集主键?

MS SQL Server 中的链接 Informix 表忽略标准?

如何比较sql server中忽略秒的两个日期