首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL Server - SQL游标vs ADO.NET

SQL Server - SQL游标vs ADO.NET
EN

Stack Overflow用户
提问于 2009-04-29 14:16:02
回答 4查看 2.5K关注 0票数 2

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-29 14:19:50

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

编辑:这个指向另一个相关问题的Answer将给游标和循环带来一些利弊。这个答案似乎与我之前关于缩放的断言(参见上文)相冲突。似乎暗示你越大,你可能越想把它移到你的代码中,而不是存储过程中。

票数 2
EN

Stack Overflow用户

发布于 2009-04-29 14:33:02

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2009-04-29 14:56:59

游标的替代方案

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/802549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档