我有一个查询如下。我会从select中获得多个MethodID。我是否使用while循环或其他方式来读取从select中检索的每个MethodID以危害IF ELSE? (@PID 将是一个输入参数)我该怎么做?
SELECT DISTINCT MethodID FROM Table
WHERE PID = @PID
IF @MethodID = 10
EXEC sp1
ELSE IF @MethodID = 20
EXEC sp2
答案 0 :(得分:1)
如果查询返回一组MethodID
并且该集合可能包含多于1,那么如果您需要知道的是该集合是否包含10,那么请使用IN
或{{1子句:
EXISTS
如果有很多情况并且此查询效果不佳,请考虑将结果加载到临时表中。
这也可以使用IF (EXISTS (SELECT 1 FROM Table WHERE PID = @PID AND MethodID = 10))
EXEC sp1
IF (EXISTS (SELECT 1 FROM Table WHERE PID = @PID AND MethodID = 20))
EXEC sp2
条款完成,但IN
在这种情况下更容易,可能表现更好。
答案 1 :(得分:0)
编写循环迭代游标的结果集。这是游标的一个很好的用例,因为每次迭代都需要执行副作用(过程调用)。无论如何你需要一个循环,光标在这里很方便使用。