gpt4 book ai didi

sql-server - 有没有一种方法可以在不使用游标的情况下循环遍历 SQL 中的表变量?

转载 作者:行者123 更新时间:2023-12-01 16:22:14 27 4
gpt4 key购买 nike

假设我有以下简单的表变量:

declare @databases table
(
DatabaseID int,
Name varchar(15),
Server varchar(15)
)
-- insert a bunch rows into @databases

如果我想迭代行,声明和使用游标是我唯一的选择吗?还有别的办法吗?

最佳答案

首先,您应该绝对确定需要迭代每一行 - 基于集合的操作在我能想到的每种情况下都会执行得更快,并且通常会使用更简单的代码。

根据您的数据,可以仅使用 SELECT 语句进行循环,如下所示:

Declare @Id int

While (Select Count(*) From ATable Where Processed = 0) > 0
Begin
Select Top 1 @Id = Id From ATable Where Processed = 0

--Do some processing here

Update ATable Set Processed = 1 Where Id = @Id

End

另一种选择是使用临时表:

Select *
Into #Temp
From ATable

Declare @Id int

While (Select Count(*) From #Temp) > 0
Begin

Select Top 1 @Id = Id From #Temp

--Do some processing here

Delete #Temp Where Id = @Id

End

您应该选择的选项实际上取决于数据的结构和数量。

注意:如果您使用的是 SQL Server,则可以使用以下方式获得更好的服务:

WHILE EXISTS(SELECT * FROM #Temp)

使用 COUNT 必须触及表中的每一行,EXISTS 只需触及第一行(请参阅下面的 Josef's answer)。

关于sql-server - 有没有一种方法可以在不使用游标的情况下循环遍历 SQL 中的表变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com