【发布时间】:2011-05-06 05:54:37
【问题描述】:
我已经进行了几次与此相关(不完全)的讨论,但我想知道针对我的情况的正确解决方案,因此发布了这个问题。
我需要根据某些条件从表中选择一些记录并将每个记录值传递给 SP。
我想用 Cursor 循环遍历记录集,经过一番谷歌搜索后,我发现也使用了 while 循环,并且有很多关于哪个最好的讨论,其中大多数人说这取决于情况。现在我无法判断自己的情况,因此将其放在专家面前。
这是我想到的while循环:
Table Test
{
id int
value int
-- Some more fields
}
WHILE EXISTS(SELECT TOP 1 id FROM Test WHERE isValid=1)
BEGIN
DECLARE @id AS INT
DECLARE @value AS INT
SELECT TOP 1 @id=id, @value=value FROM Test WHERE isValid=1
EXEC SP_SomeProcessingSP @id, @value -- Some more fields passed to it from above table
-- After execution of the above SP I need to update the record to invalid
UPDATE Test SET isValid = 0 WHERE id=@id
END
这种方法比游标更好吗?如果有人可以在没有 while 和 cursor 的情况下提出更好的解决方案,那就太好了(我想避免两者)。
编辑: 修改了 while 块并给出了示例表。现在在这个while块中调用的SP从几个表中访问数据并进行一些处理并将数据插入到其他几个表中。
【问题讨论】:
-
您可能需要考虑使用CLR Stored Procedure。我不确定它的优点和缺点。可能是对它更了解的人可以提供更多的信息。
标签: sql-server-2008 stored-procedures cursor while-loop recordset