Sql 如何将查询结果存储到临时表中
我正在尝试使用以下查询将SQL查询生成的结果插入到临时表中:Sql 如何将查询结果存储到临时表中,sql,sql-server,Sql,Sql Server,我正在尝试使用以下查询将SQL查询生成的结果插入到临时表中: SELECT * INTO #YourTempTable FROM (WITH cte AS ( SELECT sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId, count(*) over (partition by sp.edge) as cnt FROM
SELECT *
INTO #YourTempTable
FROM
(WITH cte AS
(
SELECT
sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId,
count(*) over (partition by sp.edge) as cnt
FROM
Budget sb
JOIN
Sap sp ON sb.Trace = sp.Trace
WHERE
sb.Trace IN (SELECT Trace FROM Sap
WHERE sb.UserId in ('R5', 'HB'))
)
SELECT cte.*
FROM cte
WHERE cnt > 1
ORDER BY edge DESC;
)
我得到一个错误:
味精156,第15级,状态1,第4行关键字“with”附近的语法不正确 Msg 319,第15级,状态1,第4行
关键字“with”附近的语法不正确。如果此语句是公共表表达式、xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止 味精102,第15级,状态1,第12行
“')附近的语法不正确
有人能告诉我这件事吗?
在选择之前使用:
with cte as (
select sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId,
count(*) over (partition by sp.edge) as cnt
from Budget sb join
Sap sp
on sb.Trace = sp.Trace
where sb.Trace in (select Trace from Sap where sb.UserId in ('R5', 'HB'))
)
SELECT *
INTO #YourTempTable
FROM cte
WHERE cnt > 1
ORDER BY edge desc;
请注意:Oracle支持您的语法,但其他数据库不支持您的语法。通常,带
的应该位于语句的最开头
此外,子查询是不必要的。事实上,您将得到两个额外的错误:子查询没有别名,并且子查询中不允许使用ORDER BY
(除非使用TOP
或FETCH FIRST
)WITH
在选择之前:
with cte as (
select sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId,
count(*) over (partition by sp.edge) as cnt
from Budget sb join
Sap sp
on sb.Trace = sp.Trace
where sb.Trace in (select Trace from Sap where sb.UserId in ('R5', 'HB'))
)
SELECT *
INTO #YourTempTable
FROM cte
WHERE cnt > 1
ORDER BY edge desc;
请注意:Oracle支持您的语法,但其他数据库不支持您的语法。通常,带
的应该位于语句的最开头
此外,子查询是不必要的。事实上,您将得到两个额外的错误:子查询没有别名,并且子查询中不允许使用ORDER BY
(除非使用TOP
或FETCH FIRST
)更快的响应,并且您发现的损坏内容比我多。获取我的upvote。它是否在DB中创建临时表?还是表是动态创建的?@user2961127。SQL Server没有具体化CTE(无论是好是坏)。这个逻辑已经融入到执行计划中。更快的响应,你发现的破碎的东西比我多。获取我的upvote。它是否在DB中创建临时表?还是表是动态创建的?@user2961127。SQL Server没有具体化CTE(无论是好是坏)。该逻辑刚刚被纳入到执行计划中。