temporäres Resultset in table Function

28/12/2009 - 11:18 von indian | Report spam
Hallo,
ich möchte gerne eine rekursive Datenabfrage durchführen und diese
Daten mittels einer Table-Function zurückgeben.
Das Statement an sich funktioniert problemlos.

with c as
(
SELECT Spalte1, Spalte2, Spalte3, Spalte4, Spalte5, Spalte6, 0
Spalte7
FROM RV_OBJEKT_HIERARCHIE
WHERE (Spalte2 = 2)
union all
SELECT Spalte1, Spalte2, Spalte3, Spalte4, Spalte5, Spalte6,
Spalte7+ 1
FROM RV_OBJEKT_HIERARCHIE t , c where t.Spalte2 = c.Spalte1)
select c.Spalte1, c.Spalte2, Spalte3, Spalte4, Spalte5, Spalte6,
SYMBOLBEZEICHNUNGEN.la,ebene from c LEFT OUTER JOIN
dbo.fkt_SYMBOLBEZEICHNUNGEN('') AS SYMBOLBEZEICHNUNGEN ON c.Spalte6 SYMBOLBEZEICHNUNGEN.ID
where Spalte5 = 0 order by Spalte2

Wenn ich jetzt aber diese Daten in eine temporàre Rückgabetabelle
kopieren möchte, gibt der SQL-Server einen Fehler zurück:

CREATE FUNCTION fkt_RV_ITEM_OBJECTS
(
)
RETURNS
@ITEM_OBJECTS TABLE
(
Spalte1 [int] NOT NULL,
Spalte2 [int],
Spalte3 [int] ,
Spalte4 [int] ,
Spalte5 [int] ,
Spalte6 [int] ,
Spalte7 [int]

)

WITH ENCRYPTION
AS


BEGIN


insert into @ITEM_OBJECTS
(
[ID] ,
[Spalte1] ,
[Spalte2] ,
[Spalte3] ,
[Spalte4] ,
[Spalte5] ,
[Spalte6] ,
[Spalte7]
)
(
with c as
(
SELECT Spalte1, Spalte2, Spalte3, Spalte4, Spalte5, Spalte6, 0
Spalte7
FROM RV_OBJEKT_HIERARCHIE
WHERE (Spalte2 = 2)
union all
SELECT Spalte1, Spalte2, Spalte3, Spalte4, Spalte5, Spalte6,
Spalte7+ 1
FROM RV_OBJEKT_HIERARCHIE t , c where t.Spalte2 = c.Spalte1)
select c.Spalte1, c.Spalte2, Spalte3, Spalte4, Spalte5, Spalte6,
SYMBOLBEZEICHNUNGEN.la,ebene from c LEFT OUTER JOIN
dbo.fkt_SYMBOLBEZEICHNUNGEN('') AS SYMBOLBEZEICHNUNGEN ON c.Spalte6 SYMBOLBEZEICHNUNGEN.ID
where Spalte5 = 0 order by Spalte2
)
RETURN
END


Es gibt dann folgende Fehlermeldungen:

Meldung 156, Ebene 15, Status 1, Prozedur fkt_RV_ITEM_OBJECTS, Zeile
57
Falsche Syntax in der Nàhe des 'WITH'-Schlüsselwortes.
Meldung 319, Ebene 15, Status 1, Prozedur fkt_RV_ITEM_OBJECTS, Zeile
57
Falsche Syntax in der Nàhe des WITH-Schlüsselwortes. Falls diese
Anweisung ein allgemeiner Tabellenausdruck oder eine XMLNAMESPACES-
Klausel ist, muss die vorherige Anweisung mit einem Semikolon
abgeschlossen werden.
Meldung 102, Ebene 15, Status 1, Prozedur fkt_RV_ITEM_OBJECTS, Zeile
77
Falsche Syntax in der Nàhe von ')'.


Kann mir jemand einen Tip geben, welchen Fehler ich mache?

Gruß Jörg
 

Lesen sie die antworten

#1 Elmar Boye
28/12/2009 - 14:28 | Warnen spam
Hallo,

"indian" schrieb im Newsbeitrag news:
ich möchte gerne eine rekursive Datenabfrage durchführen und diese
Daten mittels einer Table-Function zurückgeben.
Das Statement an sich funktioniert problemlos.


Wenn ich jetzt aber diese Daten in eine temporàre Rückgabetabelle
kopieren möchte, gibt der SQL-Server einen Fehler zurück:


CREATE FUNCTION fkt_RV_ITEM_OBJECTS
(
)
RETURNS @ITEM_OBJECTS TABLE [...]
AS
BEGIN



Die Syntax lautet für INSERT lautet hier

with c as ( SELECT Spalte1 ... )
insert into @ITEM_OBJECTS ([ID] , ...)
SELECT [Spalte1] , ... FROM c;

RETURN
END



Siehe auch INSERT Syntax:
http://msdn.microsoft.com/de-de/lib...74335.aspx

Gruß Elmar

Ähnliche fragen