Sql server 我是否可以在不使用while循环的情况下编写以下查询并提高效率?
是否有其他方法可以执行以下查询Sql server 我是否可以在不使用while循环的情况下编写以下查询并提高效率?,sql-server,Sql Server,是否有其他方法可以执行以下查询 SELECT @MinID = MIN(ID), @MaxID = MAX(ID) FROM #stp WHILE (@MinID <= @MaxID AND IsNull(@MaxID, 0) > 0) BEGIN SELECT @result_mstr_id = result_mstr_id FROM #stp WHERE ID = @MinID EXECUTE @err = f_rslm_publish @r
SELECT @MinID = MIN(ID), @MaxID = MAX(ID)
FROM #stp
WHILE (@MinID <= @MaxID AND IsNull(@MaxID, 0) > 0)
BEGIN
SELECT @result_mstr_id = result_mstr_id
FROM #stp
WHERE ID = @MinID
EXECUTE @err = f_rslm_publish @result_mstr_id
UPDATE dbo.results
SET result_stat_cd = CASE result_stat_cd
WHEN 'IP' THEN 'C'
WHEN 'IS' THEN 'S'
ELSE result_stat_cd
END
WHERE result_mstr_id = @result_mstr_id
SELECT @MinID = @MinID + 1
END
这是典型的由计数器输入的循环,但我可以将其重新写入一个查询吗?您不能。如果需要对stp表中的每个ID执行存储过程f_rslm_publish,则需要使用WHILE循环或游标
当然,除非您可以更改存储过程f_rslm_publish的定义,否则在这种情况下,很有可能重写它以接受一系列ID值,并且可能不向存储过程代码中添加WHILE循环。f_rslm_publish的作用是什么?您的示例代码可能要简单得多。如果@错误!=0个转到错误语句是无关的和分散注意力的。更新查询似乎也不相关。如果您编辑了问题的标题,以表明您的场景的一个关键元素是为存储在表列中的多个值执行一个存储过程,那将很好。这将如何替换语句EXECUTE@err=f_rslm_publish@result_mstr_id的WHILE循环?我认为这是更改结果的关键发布以接受一系列ID
WHERE result_mstr_id between @MinId and @Maxid