252: Der rekursive allgemeine Tabellenausdruck '%1!' enthält keinen UNION ALL-Operator
Fehlermeldung:
Meldung 252, Ebene 16, Status 1, Zeile 1
Der rekursive allgemeine Tabellenausdruck '%1!' enthält keinen UNION ALL-Operator der obersten Ebene.
Ebene:
16.
Beschreibung:
Diese Fehlermeldung erscheint, wenn eine Common Table Expression keinen UNION ALL Operator der obersten Ebene besitzt.
Auswirkungen:
Das SQL Statement kann zwar geparst werden, jedoch zur Laufzeit wird der Fehler ausgelöst.
Behebung:
Fehler der Ebene 16 sind Fehler, die vom Anwender hervorgerufen werden. Sie können und müssen vom Anwender korrigiert werden. Das Statement kann so nicht ausgeführt werden. Die CTE muss einen UNION ALL Operator auf der obersten Ebene enthalten.
Versionen:
Diese Fehlermeldung wurde mit SQL Server 2005 eingeführt.
Beispiele:
USE tempdb;
GO
IF OBJECT_ID('tempdb..#t') > 0
DROP TABLE #t
GO
CREATE TABLE #t
(
id INT,
reportToID INT NULL,
)
INSERT INTO #t SELECT 1, NULL
UNION ALL SELECT 2, 1
UNION ALL SELECT 3, 1
UNION ALL SELECT 4, 2
GO
WITH MyCTE (id, reportToID, Level)
AS
(
SELECT t1.ID, t1.reportToID, Level + 1
FROM #t AS t1
JOIN MyCTE AS t2
ON t1.reportToID = t2.ID
)
SELECT *
FROM MyCTE
GO
Anmerkungen:
Im obigen Beispiel wird versucht eine CTE ohne UNION ALL Operator auf der obersten Ebene zu erstellen. Dies löst den Fehler aus.