我必须计算涉及来自多个表的数据的值。我想知道,与将数据读入数据集(使用简单的选择存储过程)然后循环遍历记录相比,使用带游标的存储过程是否会提供性能优势?数据集不大,它包含6个表格,每个表格包含10个记录,主要有GUID,几个nvarchar(100)字段,一个浮点列和一个nvarchar(max)。SQL Server - SQL游标与ADO.NET
2
A
回答
2
这将可能取决于你可能会被检索回的数据集(在设定较大,比较合乎逻辑的,可能是在SQL Server内部围绕它传递的,而不是执行),但我倾向于认为,如果您正在寻找执行计算,请在代码中执行并远离存储过程。如果您需要使用游标将数据集中在一起,那就这样做吧,但是使用它们来执行计算和其他非检索功能我认为应该避开。
编辑:这Answer到另一个相关的问题会给游标与循环的一些优点和缺点。这个答案似乎与我之前关于缩放的说法(请参阅上文)有冲突。似乎表明,你得到的越大,你可能想把它移到你的代码中,而不是在存储过程中。
0
游标应该更快(除非你在SQL中而不是在ADO.NET中做奇怪的事情)。
这就是说,我经常发现游标可以通过一点运动来消除。你需要做什么程序?
干杯,
埃里克
1
游标应该更快,但如果你有很多用户运行它,它会吃掉你的服务器资源。请记住,使用.Net而不是SQL编写循环时,您拥有更强大的编码语言。
有很少情况下,使用基于标准集的SQL无法替换游标。如果您在服务器上执行此操作,则可以使用基于集合的操作。关于你在做什么的更多细节?
如果您决定使用游标,请牢记FAST_FORWARD只读游标将为您提供最佳性能,并确保使用释放语句释放它。见here的光标提示
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<[email protected])
begin
--whatever you need to do
set @i = @i + 1
end
相关问题
- 1. SQL Server 2005游标
- 2. 游标在SQL Server
- 3. Oracle游标与SQL Server光标
- 4. SQL Server中的游标
- 5. Sql Server的递归游标?
- 6. sql server 2008游标执行
- 7. jQuery Bootgrid使用ADO.Net与SQL Server 2012
- 8. ADO.NET Command.Prepare和SQL Server 2005
- 9. IF EXISTS在SQL Server游标不工作
- 10. SQL Server使用游标查询xml
- 11. SQL Server嵌套游标问题
- 12. 执行计数内游标,sql server
- 13. 从游标源删除行SQL Server
- 14. SQL Server查询性能:嵌套游标
- 15. 替代sql游标
- 16. ADO.NET更新SQL Server 2008中的表
- 17. SQL Server的ADO.Net连接字符串
- 18. ADO.NET + Sql Server Varchar编码问题
- 19. 使用ADO.NET从SQL Server获取数据
- 20. 通过ADO.NET访问SQL Server消息
- 21. ADO.NET事务和SQL Server 2008事务
- 22. 从ADO.NET确定SQL Server的版本
- 23. 游标sql问题
- 24. 游标SQL查询
- 25. SQL游标使用
- 26. SQL游标问题
- 27. sql游标的替代品
- 28. SQL游标与条件在WHERE子句
- 29. Ado.net Sql连接
- 30. SQL语法:SQL Server与Teradata