我发现在下面的SQL和动态SQL中使用了一个游标。 Profile提出了相当多的执行计划,我认为它必须处理这个游标。这是一个糟糕的SQL选择吗?
SET @SelectStmtSubHeader = 'SELECT DISTINCT
dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
PONumber,
sh.GPCustomerID,
.....
答案 0 :(得分:4)
这不是游标的一个例子。
游标必须是......
DECLARE this_is_a_cursor CURSOR
FOR
SELECT
stuff
FROM
a_query
您显示的剪切代码似乎使用标量函数来派生一个值,该值与单词cursor
混淆。但是有一个名为cursor
的字段并不能使它成为游标。
答案 1 :(得分:3)
如果设置逻辑中存在替代方案,游标几乎总是一个不好的选择。
SQL基于集合逻辑。它们并不意味着像集合一样进行迭代。
SQL优化器通常非常擅长找到检索数据的巧妙方法。游标是一种相对简单的工具。但是ANSI SQL确实需要它,所以它通常存在。
这是Sybase的一个很好的例子