2009-10-27 70 views
4

我有,SQL替換舊值與新的

命名爲tbl.Products一個表,其中有一個名爲articlenumber列,滿喜歡s401s402數字的等等。我產生了新的文章編號將替換名單舊的:

s401 I00010 
s402 I00020 
s403 I00030 
s403 I00040 
... 

我有一個查詢,我希望它能解決,但不知何故它什麼都不做。

(當然我有嵌套其他值進入查詢)

SELECT REPLACE('articlenumber','s401','I00010') FROM tbl.Products 

我如何查詢它取代在這樣的柱用新的舊的價值觀念?

+0

您在tblProducts中使用了多少行?有多少對舊/新貨號? – Thorsten

回答

7

使用替換,總是選擇先仔細檢查,你會得到預期的結果:)

的,當你只是選擇新替換的值,而不是與他們做任何事情......那是一個非常好的主意更新代碼 -

Update tbl.Products 
Set articlenumber = replace(articlenumber, 's401', 'I00010') 
+0

很好的答案可能會告訴我,我多次這樣做? – elhombre

+2

我認爲最好的方法是在Excel中做到這一點。在列A和B列的舊值新值,那麼在C列佔位符的值寫入查詢 - 更新tbl.Products 設置articlenumber =替換(articlenumber,「&A1&」,「&B1'); 然後,將單元格右下角的黑色小工具提示一直拖到電子表格和中提琴的底部,它會生成所有腳本。希望它有助於 –

+1

我忘記了B1:D之後的「&」 –

10

做一個可更換有問題(如果你有一個文章S401和S4010?),因此這將是更強大的做這樣的:

Update tblProducts 
SET articlenumber = 'I000010' 
Where articlenumber = 's401'; 

如果您有許多更改要做,您可以生成一個小腳本(例如使用Excel,如TheButcher建議的那樣),也可以使用列oldVal和newVal將數據導入到一個小表tblVals中,然後使用此聲明:

Update tblProducts p 
SET articlenumber = (Select newVal 
    From tblVals 
    where oldVal = p.articlenumber); 

這可以讓你做一個語句的更新再次將低於運行的可能會遇到問題,如果它是很長的腳本更穩健。

第三個想法是做在構建新的編號爲舊號碼(如果這樣的事情存在),在SQL這樣的邏輯(或存儲過程):

Update tblProducts p 
SET articlenumber = 'I0000' || Right(articlenumber,1) || '0' 

(當然這是完全簡化的,可能不足以滿足您的30k行)。

+0

「Update tblProducts SET articlenumber ='I000010' Where Articlenumber ='s401';」 = godsent! :D當與30k行工作! –