Sto semplificando una complicata istruzione select, quindi ho pensato di utilizzare espressioni di tabella comuni.Come posso avere più espressioni di tabella comuni in una singola istruzione SELECT?
Dichiarare un singolo cte funziona correttamente.
WITH cte1 AS (
SELECT * from cdr.Location
)
select * from cte1
È possibile dichiarare e utilizzare più di una cte nella stessa SELECT?
cioè questo SQL dà un errore
WITH cte1 as (
SELECT * from cdr.Location
)
WITH cte2 as (
SELECT * from cdr.Location
)
select * from cte1
union
select * from cte2
l'errore è
Msg 156, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'WITH'.
Msg 319, Level 15, State 1, Line 7
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
NB. Ho provato a mettere il punto e virgola in e ottenere questo errore
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ';'.
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near ';'.
Probabilmente non rilevante, ma questo è in SQL 2008.
È fantastico. Stavo riempiendo le tabelle temporanee con i risultati del CTE e combinando in seguito, ma ho incontrato problemi con i semi-colon quando li ho confezionati in un processo memorizzato. Bel metodo! –
Non dimenticare che 'cte2' può fare riferimento a' cte1' in questo modo: ... cte2 as (SELECT * FROM cte1 WHERE ...) – Chahk
Ottima risposta! :) – pedram