SqlServer:带变量的迭代查询脚本

时间:2014-09-03 20:23:40

标签: sql sql-server

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

我没有多次复制脚本并替换值,而是希望简化。

我可以以迭代方式进行,每次使用不同的值时,会预定义值吗?

感谢。

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,我想将其视为变量,以便我使用不同的预定义值迭代此查询

1 个答案:

答案 0 :(得分:0)

所以看起来您正试图将tabl2.type设置为用户,其中ID存在于table1中,否则会删除该记录。

就像Sean Lange所说的那样,不要迭代,尝试这样的事情:

--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(通过痛苦行划线),而是利用记录集。