Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程性能问题中的游标_Sql_Sql Server_Stored Procedures_Cursor - Fatal编程技术网

Sql 存储过程性能问题中的游标

Sql 存储过程性能问题中的游标,sql,sql-server,stored-procedures,cursor,Sql,Sql Server,Stored Procedures,Cursor,我发现下面的SQL和动态SQL中使用了一个游标。Profile带来了相当多的执行计划,我认为它必须处理这个游标。这是一个错误的SQL选择吗 SET @SelectStmtSubHeader = 'SELECT DISTINCT dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE PONumber, sh.GPCustomerID, ..... 如果集合逻辑中存在替代项,那

我发现下面的SQL和动态SQL中使用了一个游标。Profile带来了相当多的执行计划,我认为它必须处理这个游标。这是一个错误的SQL选择吗

SET @SelectStmtSubHeader = 'SELECT DISTINCT
        dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
         PONumber,
        sh.GPCustomerID,
        .....

如果集合逻辑中存在替代项,那么游标几乎总是一个需要避免的错误选择

SQL是基于集合逻辑的。它们不应该像集合一样被迭代

SQL优化器通常非常擅长找到检索数据的聪明方法。光标是一种相对简单的工具。但是ANSI SQL确实需要它,所以它通常是存在的

下面是Sybase的一个好例子


如果集合逻辑中存在替代方案,那么游标几乎总是一个不好的选择

SQL是基于集合逻辑的。它们不应该像集合一样被迭代

SQL优化器通常非常擅长找到检索数据的聪明方法。光标是一种相对简单的工具。但是ANSI SQL确实需要它,所以它通常是存在的

下面是Sybase的一个好例子


这不是光标的示例

光标需要

DECLARE this_is_a_cursor CURSOR
FOR
  SELECT
    stuff
  FROM
    a_query

您所展示的被剪断的代码似乎使用标量函数来派生一个值,它将该值化名为单词
光标
。但是,有一个名为
cursor
的字段并不能使其成为游标。

这不是游标的示例

光标需要

DECLARE this_is_a_cursor CURSOR
FOR
  SELECT
    stuff
  FROM
    a_query

您所展示的被剪断的代码似乎使用标量函数来派生一个值,它将该值化名为单词
光标
。但是有一个名为
cursor
的字段并不能使它成为一个游标。

像这样的绝对主义言论让我不寒而栗。游标总是有一个性能开销,但在某些情况下,开销比备选方案小。例如,尝试在SQL中运行总计。仅仅因为它们经常被天真的程序员不恰当地使用,这并不意味着它们普遍是坏的。这是很公平的。请注意,我提供的链接来自Sybase。作为DBs的制造商,我认为他们是一个很好的来源,他们基本上说,如果你有其他选择,可以使用它。尽管如此,我还是会编辑我的帖子;)像那样的绝对主义言论让我不寒而栗。游标总是有一个性能开销,但在某些情况下,开销比备选方案小。例如,尝试在SQL中运行总计。仅仅因为它们经常被天真的程序员不恰当地使用,这并不意味着它们普遍是坏的。这是很公平的。请注意,我提供的链接来自Sybase。作为DBs的制造商,我认为他们是一个很好的来源,他们基本上说,如果你有其他选择,可以使用它。尽管如此,我还是会编辑我的帖子;)+我回答了这个问题,你证明了这个问题没有意义:p+1我回答了这个问题,你证明了这个问题没有意义:p+1,你证明了这个问题没有意义