2014-09-03 76 views
0

我有一个简单的查询脚本(检查表中是否存在某个值,如果是删除该行),我需要使用不同的值运行。SqlServer:变量的迭代查询脚本

而不是复制脚本几次并替换值,我想简化它。

我可以以迭代的方式做到这一点,每次使用不同的值时,这些值将被预定义吗?

谢谢。

IF EXISTS(SELECT * FROM table1 WHERE tId = '10') 
    EXEC('UPDATE table2 SET type=N''user'' WHERE id = 10') 
[ ELSE 
    DELETE FROM tabl2 WHERE id = 10 
] 

值10在这里,我希望把它当作变量,所以我认为这个迭代查询不同的预设值

+3

为什么要迭代?这意味着你做RBAR会慢很多。为什么不把它们一次全部删除?从SomeTable中删除YourKey IN(KeyValue1,KeyValue2等) – 2014-09-03 20:25:43

回答

0

所以它看起来像你想设置tabl2.type用户其中ID存在于table1中,否则删除该记录。

像肖恩·兰格说,不让它重复,尝试这样的东西,而不是:

--update the records in table2 that have a record in table1 
update table2 
set  type='user' 
where id in (
    select tID 
    from table1 
    where tID in (10,11,12...n) 
    ) 

--delete the records in table2 that lack a record in table1 
delete table2 
where id not in (
    select tID 
    from table1 
    where tID in (10,11,12...n) 
    ) 

为多,要避免做RBAR(由痛苦的排行),您可以和代替利用成套记录。