SQL Server WITH-instructie

Mijn doel is om het resultaat van de ene CTE te selecteren en in een andere tabel in te voegen met een andere CTE in dezelfde procedure. Hoe je dat doet?

Mijn fout is…

ongeldige objectnaam xy.

Mijn vraag is

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
)

Antwoord 1, autoriteit 100%

Een CTE is slechts goed voor één zoekopdracht, maar het lijkt erop dat u in elke zoekopdracht een CTE kunt gebruiken:

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
)

Antwoord 2, autoriteit 39%

Je kunt zowel het invoegen als het uitvoeren van de resultaten doen door de OUTPUT-component te gebruiken om de ingevoegde rijen te retourneren.

;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

of een echte test

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

Antwoord 3, autoriteit 17%

U kunt de INSERTdus uitvoeren, u kunt niet meerdere query’s uitvoeren na uw 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

In deze situatie kan het handig zijn om tijdelijke tabellen te gebruiken, omdat u anders een zoekopdracht meerdere keren opnieuw moet uitvoeren.

Other episodes