我不能使用
中的twith t as (
select row_number() OVER (partition by ID ORDER BY id) as numb, *
from my_table
where id= 6
)
select top 2 from t # it works
select top 2 from t # here I get error Invalid object name 't'.
是否有任何提示使用时间超过时间?
答案 0 :(得分:4)
你不能这样做。 CTE只能在一个语句中使用(尽管您可以在一个语句中多次使用它。
看看this article。 SNIPPIT:
一旦定义了CTE,它就可以 由第一个引用多次 跟随它的查询。
公用表表达式(CTE)可以 被认为是临时结果集 这是在执行中定义的 单个SELECT,INSERT的范围, 更新,删除或创建视图 言。
强调“单个SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句的范围。”
答案 1 :(得分:1)
是否有任何提示使用时间超过时间?
当然,如果您在存储过程中执行此操作,只需将其转储到#temp表中即可。在存储过程结束时,#temp表消失。
with t as (
select row_number() OVER (partition by ID ORDER BY id) as numb, *
from my_table
where id= 6
)
select * into #tmp from t
select top 2 from #tmp -- good
select top 2 from #tmp -- good also
在SP之外,只需确保在尝试再次创建#table之前删除#table,否则下一个select ..into #name
会因#name already exists
错误而退出
答案 2 :(得分:0)
您只能在CTE后面的单个查询中使用CTE。但是,您可以根据需要使后面的查询变得复杂。
在您的示例中,您可能会考虑两个选择之间的联合,具体取决于您想要的内容。您提供的代码不够具有描述性,无法建议任何其他变体。