【发布时间】:2020-10-21 21:04:27
【问题描述】:
我正在尝试根据该表中的列多次输出该表的值。
我尝试使用 CTE 即时制作数字表:
WITH cte AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY (select 0)) AS i
FROM
sys.columns c1 CROSS JOIN sys.columns c2 CROSS JOIN sys.columns c3
)
select *
from myTable, cte
WHERE i <= myTable.timesToRepeatColumn
and myTable.id = '209386'
这个 SQL 似乎需要永远运行,所以它似乎试图在加入之前运行整个 CTE。
如果我将myTable.timesToRepeatColumn 替换为静态值(例如 10000),则查询几乎会立即返回。因此,在完全交叉加入 CTE 表之前,它似乎正在执行 where i
我如何告诉 SQL 像使用静态数字一样先执行 where 语句?
【问题讨论】:
-
BTW
myTable.timesToRepeatColumn我的测试行的值为 3,因此它应该几乎可以立即运行。
标签: sql sql-server query-optimization common-table-expression