Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将查询结果存储到临时表中_Sql_Sql Server - Fatal编程技术网

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

我正在尝试使用以下查询将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 
            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(无论是好是坏)。该逻辑刚刚被纳入到执行计划中。