我在这里检查了论坛并了解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个更新语句来涵盖所有可能性。
我希望这有助于减轻光线。
答案 0 :(得分:3)
不要使用循环。永远不应该在循环中完成更新!!!!
我要做的是创建一个将abreviations映射到long描述的表。 然后你可以轻松添加新的,你可以用这种方式编写更新:
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
答案 1 :(得分: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