Funktion erstellen, Tabellenvariable zurückgeben T-SQL

db_gustl

Benutzer
Beiträge
13
Hallo,

ich habe folgende Funktion:

Code:
ALTER FUNCTION dbo.func_be_bestand (@storeid int)
RETURNS TABLE
AS
DECLARE @tmp_lager_idents TABLE (LAGER_IDENT nvarchar(90))
INSERT INTO @tmp_lager_idents SELECT LAGER_IDENT
FROM OPENQUERY(ORANEXUS_SMTOFFICE, '
              SELECT LAGER_IDENT
              FROM EW_BE_EINZELGEBINDE
              WHERE MENGE > 0
              GROUP BY LAGER_IDENT                                         
              ')
return
(
  SELECT * FROM @tmp_lager_idents
)

Ich möchte die Ergebnistablle einfach nur zurückgeben lassen ohne die Tabellenstruktur vorher bei RETURNS zu erstellen, da diese nämlich später dynamisch werden soll.

Folgende Fehlermeldungen gibt mit der SQL 2005 Server aus:
Meldung 156, Ebene 15, Status 1, Prozedur func_be_bestand, Zeile 5
Falsche Syntax in der Nähe des 'DECLARE'-Schlüsselwortes.
Meldung 178, Ebene 15, Status 1, Prozedur func_be_bestand, Zeile 15
Eine RETURN-Anweisung mit einem Rückgabewert kann in diesem Kontext nicht verwendet werden.

Ich probiere schon sehr lange rum, und komme einfach nicht drauf was ich hier falsch mache... Vielleicht könnte mir wer helfen?

Gruß Gustl
 
Werbung:

Tommi

Datenbank-Guru
Beiträge
285
Hallo Gustl,

die Tabellenwertfunktion kann wie folgt angegeben werden:
Code:
ALTER FUNCTION dbo.func_be_bestand (@storeid int) RETURNS TABLE
AS
RETURN (
SELECT LAGER_IDENT
FROM OPENQUERY(ORANEXUS_SMTOFFICE, '
              SELECT LAGER_IDENT
              FROM EW_BE_EINZELGEBINDE
              WHERE MENGE > 0
              GROUP BY LAGER_IDENT                                     
              ')
)

oder, wenn noch Zwischenrechnungen bzw. Zwischenschritte mit berücksichtigt und programmiert werden müssen, dann auch so:

Code:
ALTER FUNCTION dbo.func_be_bestand (@storeid int)
RETURNS @tmp_lager_idents TABLE (LAGER_IDENT nvarchar(90))
AS
BEGIN
 
INSERT INTO @tmp_lager_idents SELECT LAGER_IDENT
FROM OPENQUERY(ORANEXUS_SMTOFFICE, '
              SELECT LAGER_IDENT
              FROM EW_BE_EINZELGEBINDE
              WHERE MENGE > 0
              GROUP BY LAGER_IDENT                                     
              ')
RETURN
END

Viele Grüße,
Tommi
 
Oben