无法从SQL Server中的WITH ROWS AS子句插入临时表

use*_*133 1 sql t-sql sql-server common-table-expression

我想插入一个由此查询返回的结果:

WITH rows AS 
                (
                SELECT  *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
                FROM    [PROC_MN].[dbo].[TBL_FINISH_STATUS]
                 where   PO_NO='GV12762' and ???? BETWEEN '2018/03/16' AND '2018/03/18' AND [????]='Bonding'
                ) 
                SELECT  DATEDIFF(minute, mc.[????], mp.[????])
                FROM    rows mc
                JOIN    rows mp
                ON      mc.rn = mp.rn - 1 
Run Code Online (Sandbox Code Playgroud)

结果是:91

我使用此查询但不能,请帮忙!

IF OBJECT_ID('tempdb..#tempTest') IS NOT NULL     
    DROP TABLE #tempTest

        Insert into #tempTest
        WITH rows AS 
                (
                SELECT  *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
                FROM    [PROC_MN].[dbo].[TBL_FINISH_STATUS]
                 where   PO_NO='GV12762' and ???? BETWEEN '2018/03/16' AND '2018/03/18' AND [????]='Bonding'
                ) 
                SELECT  DATEDIFF(minute, mc.[????], mp.[????])
                FROM    rows mc
                JOIN    rows mp
                ON      mc.rn = mp.rn - 1 
Run Code Online (Sandbox Code Playgroud)

编辑:这个适合我

If(OBJECT_ID('tempdb..#temp') Is Not Null)
Begin
    Drop Table #Temp
End
create table #Temp
(
    OptTime int

)
;WITH rows AS 
                (
                SELECT  *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
                FROM    [PROC_MN].[dbo].[TBL_FINISH_STATUS]
                 where   PO_NO='GV12762' and ???? BETWEEN '2018/03/16' AND '2018/03/18' AND [????]='Bonding'
                ) 

                INSERT INTO #Temp
                SELECT  DATEDIFF(minute, mc.[????], mp.[????])
                FROM    rows mc
                JOIN    rows mp
                ON      mc.rn = mp.rn - 1 
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 5

您的语法错误 - 如果要从CTE插入,请执行以下操作:

; WITH rows AS 
(
    SELECT  
        *, ROW_NUMBER() OVER (ORDER BY [????]) AS rn
    FROM    
        [PROC_MN].[dbo].[TBL_FINISH_STATUS]
    WHERE
        PO_NO = 'GV12762' 
        AND ???? BETWEEN '2018/03/16' AND '2018/03/18' 
        AND [????] = 'Bonding'
) 
INSERT INTO #tempTest
    SELECT (list of columns)
    FROM rows
    WHERE (conditions)
Run Code Online (Sandbox Code Playgroud)

有关CTE语法及其使用方法的详细信息,请参阅官方Microsoft Docs

更新:如果该目标临时表尚不存在 - 请使用以下语法:

; WITH rows AS 
(  .....    ) 
SELECT (list of columns)
INSERT INTO #tempTest
FROM rows
WHERE (conditions)
Run Code Online (Sandbox Code Playgroud)