Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 我是否可以在不使用while循环的情况下编写以下查询并提高效率?_Sql Server - Fatal编程技术网

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