0

我在这里查看了论坛,了解到 t-SQL 没有 FOR 循环。但是,我想知道在这里做我需要做的最好的方法。

这是我的表(mytable)简化:

id  Code1  Code2  Code3  CodeDesc1  CodeDesc2  CodeDesk3
__  _____  _____  _____  _________  _________  _________
1   ABC    DEF    ZYX
2   DEF    ABC    ZYX
3   ZYX    GHJ    ABC

实际情况下有更多的行和更多的 Code 和 CodeDesc 列。我正在将 SAS 代码转换为 T-SQL,SAS 代码有这个(简化):

DO  x = 1 to 4 ;
 IF code0(x) = 'ABC' THEN CodeDesc0(x) = 'ABC Description'
ELSE 
 IF code0(x) = 'DEF' THEN CodeDesc0(x) = 'DEF Description'
ELSE
 IF code0(x) = 'ZYX' THEN CodeDesc0(x) = 'ZYX Description'

我的问题是如何在 T-SQL 中做类似的事情。

感谢您的建议。

添加更多信息...

如果我要使用直接 T-SQL 来做我需要做的事情,而无需任何编程,它看起来像这样:

UPDATE mytable SET CodeDesc1 = 'ABC Description' WHERE Code1 = 'ABC'
UPDATE mytable SET CodeDesc2 = 'ABC Description' WHERE Code2 = 'ABC'
UPDATE mytable SET CodeDesc3 = 'ABC Description' WHERE Code3 = 'ABC'
UPDATE mytable SET CodeDesc1 = 'DEF Description' WHERE Code1 = 'DEF'
UPDATE mytable SET CodeDesc2 = 'DEF Description' WHERE Code2 = 'DEF'
UPDATE mytable SET CodeDesc3 = 'DEF Description' WHERE Code3 = 'DEF'

因此,正如您可以通过几个不同的代码和描述看到的那样,我可以轻松编写 100 条更新语句来涵盖所有可能性。

我希望这有助于阐明更多信息。

4

2 回答 2

3

Do not use a loop. Upddates should never be done in loops!!!!

What I would do is create a table that maps the abreviations to the long descriptions. Then you can add new ones easily and you can write the update this way:

Update a
set description = b.description
from tableA a 
join tableb b on a.abbreviation = b.abbrevation
where a.description <> b.descrioption or a.description is null
于 2013-08-30T16:00:21.790 回答
2

这是您正在寻找的示例:

/********** example 1 **********/ 

declare @au_id char( 11 )

set rowcount 0
select * into #mytemp from authors

set rowcount 1

select @au_id = au_id from #mytemp

while @@rowcount <> 0
begin
    set rowcount 0
    select * from #mytemp where au_id = @au_id
    delete #mytemp where au_id = @au_id

    set rowcount 1
    select @au_id = au_id from #mytemp<BR/>
end
set rowcount 0

Taken from here: http://support.microsoft.com/kb/111401

于 2013-08-29T00:18:03.667 回答