Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Funktion erstellen, Tabellenvariable zurückgeben T-SQL

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von db_gustl, 11 September 2012.

  1. db_gustl

    db_gustl Benutzer

    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
     
  2. Tommi

    Tommi Datenbank-Guru

    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
     
    PLSQL_SQL gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden