用于填充 Sql Server CURSOR 的 SELECT 语句(通常)可以返回零行。
是否建议将其包含在 IF 检查中,以便 CURSOR 不会被声明、打开、关闭和释放?
或者 RDMS 是否会自动知道不创建 CURSOR 和/或基于完全相同的 SELECT 的 IF 是否会推断查询处理两次?
用于填充 Sql Server CURSOR 的 SELECT 语句(通常)可以返回零行。
是否建议将其包含在 IF 检查中,以便 CURSOR 不会被声明、打开、关闭和释放?
或者 RDMS 是否会自动知道不创建 CURSOR 和/或基于完全相同的 SELECT 的 IF 是否会推断查询处理两次?
如果游标的源数据集包含 0 行,则游标的这些步骤非常少且可以忽略不计。我不担心为
IF
它编写一个声明。是的,这将导致
SELECT
查询运行两次,这取决于查询,可能会消耗大量资源,并且可能会锁定基础表两倍。所以你最好不要这样做。如果要这样做,最好运行
SELECT
一次查询并将结果存储在临时表中。这样,您可以稍后重新使用临时表中的结果(如果有)。但正如前面提到的,我认为IF
无论如何都没有必要发表声明。