2012-09-21 40 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