SQL Server - SQL游标与ADO.NET

时间:2009-04-29 14:16:02

标签: sql ado.net cursors

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

4 个答案:

答案 0 :(得分:2)

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

编辑:这个Answer到另一个相关问题会给游标与循环带来一些利弊。这个答案似乎与我之前关于缩放的断言(如上所述)相冲突。似乎表明你得到的越多,你可能想要将它移到代码而不是存储过程中就越多。

答案 1 :(得分:1)

游标应该更快,但如果你有很多用户运行它会占用你的服务器资源。请记住,在.Net而不是SQL中编写循环时,您拥有更强大的编码语言。

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

如果您决定使用游标,请记住FAST_FORWARD只读游标将为您提供最佳性能,并确保使用deallocate语句释放它。有关光标提示,请参阅here

答案 2 :(得分:1)

替代游标

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

答案 3 :(得分:0)

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

那就是说,我经常发现游标可以通过一点点的工作来消除。你需要做什么程序?

干杯,
埃里克

相关问题