【问题标题】:Sql Server Ignore update errorsSql Server 忽略更新错误
【发布时间】: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。

有什么方法可以忽略出错的行并继续更新其他行?

【问题讨论】:

    标签: sql


    【解决方案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'
      

      【讨论】:

        猜你喜欢
        • 2013-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        相关资源
        最近更新 更多