如何用SQL中的任何东西替换存储过程的迭代执行?
有一种场景,其中SP在WHILE循环中执行。我想要一个解决方案,可以防止SP的迭代执行,但同时得到完全相同的结果。 下面的代码片段可能就是一个例子。考虑SP USPMYPROC正在根据所获得的参数更新表。如何用SQL中的任何东西替换存储过程的迭代执行?,sql,sql-server,tsql,stored-procedures,while-loop,Sql,Sql Server,Tsql,Stored Procedures,While Loop,有一种场景,其中SP在WHILE循环中执行。我想要一个解决方案,可以防止SP的迭代执行,但同时得到完全相同的结果。 下面的代码片段可能就是一个例子。考虑SP USPMYPROC正在根据所获得的参数更新表。 DECLARE @table TABLE ( id INT IDENTITY , Value INT ) DECLARE @counter INT = 1 , @maxcount INT , @value INT INSERT INTO @tabl
DECLARE @table TABLE
(
id INT IDENTITY
, Value INT
)
DECLARE @counter INT = 1
, @maxcount INT
, @value INT
INSERT INTO @table
VALUES ( 1 ),
( 11 ),
( 3 ),
( 23 ),
( 2 )
SELECT @maxcount = COUNT(*)
FROM @table
WHILE @counter <= @maxcount
BEGIN
SELECT @value = Value
FROM @table
WHERE id = @counter
EXECUTE uspMyProc @id = @value
SET @counter = @counter + 1
END
DECLARE@table
(
id整型标识
,Value INT
)
声明@counter INT=1
,@maxcount INT
,@value INT
插入@table
价值观(1),
( 11 ),
( 3 ),
( 23 ),
( 2 )
选择@maxcount=COUNT(*)
来自@table
而@counter可以显示uspMyProc
的代码吗?如果可以将其转换为接受一个值表而不是单个值,那么整个操作都可以基于设置,并且可以消除迭代。uspMyProc大约有2000行代码,因此无法在此处显示。但在这个例子中,它的代码非常复杂,最终需要更新表。是的,正如Zohar Peled所说,这可以在sp本身中以基于集合的方式完成。您需要处理sp中要处理的参数列表。您不能单纯从“调用”端解决它。您必须更改存储过程本身。