SQL Server-SQL游标与ADO.NET

SQL Server-SQL游标与ADO.NET,sql,ado.net,cursors,Sql,Ado.net,Cursors,我必须计算一个包含多个表中数据的值。我想知道与将数据读入数据集(使用简单的select存储过程)然后在记录中循环相比,使用带游标的存储过程是否会提供性能优势?数据集并不大,它由6个表组成,每个表大约有10条记录,主要是GUID、几个nvarchar(100)字段、一个浮点列和一个nvarchar(max)。游标应该更快(除非您在SQL中而不是在ADO.NET中做一些奇怪的事情) 这就是说,我经常发现,只需一点腿部工作,就可以消除游标。你需要做什么程序 干杯, Eric这可能取决于您可能要检索回的

我必须计算一个包含多个表中数据的值。我想知道与将数据读入数据集(使用简单的select存储过程)然后在记录中循环相比,使用带游标的存储过程是否会提供性能优势?数据集并不大,它由6个表组成,每个表大约有10条记录,主要是GUID、几个nvarchar(100)字段、一个浮点列和一个nvarchar(max)。

游标应该更快(除非您在SQL中而不是在ADO.NET中做一些奇怪的事情)

这就是说,我经常发现,只需一点腿部工作,就可以消除游标。你需要做什么程序

干杯,

Eric

这可能取决于您可能要检索回的数据集(数据集越大,在SQL Server内部执行而不是传递数据越合乎逻辑),但我倾向于认为,如果您希望执行计算,请在代码中执行,而不要使用存储过程。如果您需要使用游标将数据汇集在一起,就这样吧,但我认为应该避免使用游标进行计算和其他非检索功能


编辑:这与另一个相关的问题将给出游标与循环的一些优缺点。这个答案似乎与我之前关于缩放的断言(如上所述)相冲突。这似乎表明,您得到的数据越大,您可能越想将其移动到代码中,而不是移动到存储过程中。

游标应该更快,但如果有大量用户运行此程序,则会消耗您的服务器资源。请记住,在.Net而不是SQL中编写循环时,您有一种更强大的编码语言

很少有情况下无法使用基于标准集的SQL替换游标。如果在服务器上执行此操作,则可以使用基于集合的操作。关于你在做什么有更多的细节吗


如果决定使用游标,请记住快进只读游标将提供最佳性能,并确保使用deallocate语句来释放它。有关光标提示的信息,请参见

declare @table table (Fields int)
declare @count int
declare @i

insert inot @table (Fields)
select Fields
from Table


select @count = count(*) from @table

while (@i<=@count)
begin


--whatever you need to do
set @i = @i + 1

end
declare@table表(字段int)
声明@countint
声明@i
插入inot@table(字段)
选择字段
从桌子上
从@table中选择@count=count(*)
而(@i