WITH common_table_expression mehrfach verwenden

19/11/2008 - 17:14 von Lutz Elßner | Report spam
Gerade habe ich "CTE" entdeckt, schon stoße ich an Grenzen.

WITH cteX(a,b,c) AS
(
SELECT 1,2,3
)
SELECT * FROM cteX
SELECT * FROM cteX

Ich möchte in einer Stored Procedure den Ausdruck in mehreren
SELECT Anweisungen verwenden. Das geht jedoch nur einmal.
(Die Procedure soll mehrere Tabellen ins DataSet füllen.)

Bei der zweiten Benutzung kommt der Fehler:
Invalid object name 'cteX'.
Es wird also gleich wieder zerstört.

Kann ich das cteX lànger aufheben, vielleicht in einer Variable,
oder muss ich doch zu temporàren Tabellen greifen?

Lutz
 

Lesen sie die antworten

#1 Elmar Boye
19/11/2008 - 17:31 | Warnen spam
Hallo Lutz,

Lutz Elßner schrieb:
Gerade habe ich "CTE" entdeckt, schon stoße ich an Grenzen.

WITH cteX(a,b,c) AS
(
SELECT 1,2,3
)
SELECT * FROM cteX
SELECT * FROM cteX

Ich möchte in einer Stored Procedure den Ausdruck in mehreren
SELECT Anweisungen verwenden. Das geht jedoch nur einmal.
(Die Procedure soll mehrere Tabellen ins DataSet füllen.)



das funktioniert nicht.
Eine CTE kann nur Bestandteil einer einzelnen DML-Anweisung sein.
(Und zweimal SELECT sind zwei Anweisungen), siehe
<URL:http://msdn.microsoft.com/de-de/lib...6.aspx>

Beim Befüllen eines DataSets für mehrere Tabellen brauchst
Du nun aber mehrere Anweisungen (Resultsets), damit der Adapter
sie auseinanderhalten kann.

Kann ich das cteX lànger aufheben, vielleicht in einer Variable,
oder muss ich doch zu temporàren Tabellen greifen?



Eine temporàre Tabelle wàre (ggf. durch nàmliche CTE befüllt)
wàre eine Möglichkeit - wenn ich davon ausgehe, Du verknüpfst
das Ergebnis (JOIN o. à.)

Aber eine Kopie kann u. U. günstiger sein, da die CTE
direkt in den Abfrageplan eingebaut wird...

Gruß Elmar

Ähnliche fragen