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
)
13
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