Servidor SQL com instrução

o meu objectivo é seleccionar o resultado de um CTE e inserir noutro quadro com outro CTE no mesmo procedimento. Como fazê-lo?

O meu erro é...

o nome do objecto é inválido xy.

a minha pergunta é

WITH ds
(
    Select a, b, c 
    from test1    
),
xy
(
    select d, e, f 
    from test2 
    where (uses conditions from ds)    
)
Select * 
from ds  (the result set of ds, am exporting this to csv)

Insert into AuditTest
(
  Select * from xy
)
Author: marc_s, 2015-02-25

3 answers

Um CTE só é bom para uma consulta, mas parece que você pode usar um CTE em cada consulta:

WITH ds AS
(
  Select a, b, c from test1    
)
Select * from ds  (the result set of ds, am exporting this to csv)


WITH xy AS
(
 select d,e,f from test2 where (uses conditions from test1)    
)
Insert into AuditTest
(
  Select * from xy
)
 16
Author: D Stanley, 2015-02-25 17:18:53

Você pode realmente fazer tanto a inserção como a saída dos resultados usando a cláusula de saída para devolver as linhas inseridas.

;WITH ds AS
(
  Select a, b, c from test1 
),
xy AS
(
 select d, e, f from test2 where (uses conditions from ds)
)
Insert into AuditTest
output inserted.d, inserted.e, inserted.f
Select d, e, f from xy

Ou um teste real

CREATE TABLE #Test (a int)

;WITH ds AS
(
  Select 0 as a, 1 as b, 2 as c 
),
xy AS
(
 select a as d, b as e from ds
)
Insert into #Test 
OUTPUT inserted.a
Select e from xy
 5
Author: Ceres, 2015-02-25 17:41:43
Deste modo, não podes fazer várias perguntas depois da tua cte:
;WITH ds AS (  Select a, b, c 
              from test1    
           )
    ,xy AS (  select d,e,f 
              from test2 
              where (uses conditions from test1)    
           )
Insert into AuditTest
Select * 
from xy

Nesta situação, usar tabelas temporárias pode ser benéfico, uma vez que você estará a executar uma consulta várias vezes caso contrário.

 0
Author: Hart CO, 2015-02-25 17:23:50