2012-09-21 62 views
0

我是相當新的發佈問題,我非常感謝您的支持。 我想寫一個proc來更新我的表testAd更新腳本存儲過程sql server2008

替換函數可以做到這一點,但我有近百萬條記錄更新,我試圖使用存儲過程。

你能看看我已經開始了嗎?謝謝你,我很感激。我應該在今天結束之前想出一些事情......一種艱難的情況。我試過下面這個看起來沒有工作的人。

CREATE PROC [dbo].[testAd] 
AS 
DECLARE @ci VARCHAR (255) 
UPDATE Stage.TestAdd 
SET @ci=AddressOne 
SET @ci= CASE @ci 
WHEN 'Des Moines' THEN 'IA' 
WHEN 'Seattle' THEN 'WA' 
WHEN 'Pheonix' THEN 'Az' 
WHEN 'Phx' THEN 'Az' 
. 
. 
ELSE @ci 

END

+0

我應該補充一點..這些城市以下列格式合併爲「1234 snew wy seattle」,他們不是通過他們自己,而是依附於其他字符串。再次感謝 – user1689111

回答

0

如果我理解正確你想存儲在一個字段從[城市]的值更新匹配[狀態]

而不是使用長case語句,你可以使用以有效對錶變量,然後用該表加入更新喜歡這裏

東西:

declare @cityInState as table(city varchar(50), state char(2)) 
insert into @cityInState 
values 
    ('Des Moines','IA') 
    ,('Seattle', 'WA') 
    ,('Pheonix','Az') 
    ,('Phx','Az') 
    -- etc ... 

update yt 
set 
    fieldToUpdate = cis.state 
from 
    yourTable yt 
    inner join @cityInState cit on yt.fieldToUpdate = cit.city 

警告:將用狀態替換城市值,所以只有在你想要的情況下才運行該值。

將這個作爲額外字段添加(理想情況下是對查詢表的引用)會更好,因爲在更新之後,您將會在城市信息中刪除鬆散的

+0

嗨@Kristof,我非常感謝您的回答但我必須告訴你,只有一個領域在其地址字段中擁有該城市,並且該字段必須在同一個字段「1234 s ohio st Seattle」中被替換。我希望我沒有迷惑你。再次感謝你的回覆..我很感激。 – user1689111

+0

@ user1689111上面的代碼將做到這一點。要使用它,只需將fieldToUpdate替換爲真正的提交名稱和表格,其真實表名爲 – kristof

+0

@ user1689111,當然,您也可以將此代碼插入存儲過程 – kristof