2009-01-15 42 views
1

我已經繼承了一個非常舊的數據庫,需要更新一些數據。每行都有一個UniqueID類似C0042-45-39612的列。代碼的最後3個數字是類別Id(在本例中爲612)。Sql Server忽略更新錯誤

我需要做的只是針對某些類別和我使用這個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' 

-Edo

1

我不知道爲什麼你打擾轉換爲int。爲什麼不直接對最後三位數字進行字符串比較。另外,你正在做 - substring(id,3,3)。

我假設你簡化了上面的代碼片段,使它更容易閱讀,並且你已經先提取了39612?

我建議如下:

where UniqueID like '%612'