none
Join zwischen einer Tabelle und einer Tablevalued FunctionQL RRS feed

  • Frage

  • Hallo zusammen
     
    Ist es möglich einen Join zwischen einer Tabelle und einer Tablevalued
    Function zu machen, wenn ein Wert der Tabelle als Parameter für die Function
    benötigt wird. Mir gelingt das nicht, irgendwie kann der Parameter in diesem
    Fall nicht aufgelöst werden.
     
    Folgendes habe ich probiert:
     
    SELECT F.*
    FROM Tabelle T INNER JOIN
    dbo.TVFunction(T.ID) AS F
     
    und
     
    SELECT F.*
    FROM Tabelle T INNER JOIN
    (SELECT * FROM dbo.TVFunction(T.ID)) AS F
     
    Dann habe ich noch die ID in der Function ebenfalls zurückgegeben und
    versucht mit einer Joinbedingung zu arbeiten:
     
    SELECT F.*
    FROM Tabelle T INNER JOIN
    dbo.TVFunction(T.ID) AS F ON T.ID = F.ID
     
    und ebenfalls
    SELECT F.*
    FROM Tabelle T INNER JOIN
    (SELECT * FROM dbo.TVFunction(T.ID)) AS F ON T.ID = F.ID
     
    Die einzige Möglichkeit, die ich bisher gefunden habe:
     
    (SELECT Feld1 FROM dbo.TVFunction(T.ID)) AS Feld1,
    (SELECT Feld2 FROM dbo.TVFunction(T.ID)) AS Feld2,
    (SELECT Feld3 FROM dbo.TVFunction(T.ID)) AS Feld3,
    (SELECT Feld4 FROM dbo.TVFunction(T.ID)) AS Feld4
    FROM Tabelle T
     
    Nur bin ich nicht sicher ob da der SQLServer den Aufruf der Funktion 4 mal
    ausführt oder nur 1 mal und dann 3 mal aus dem Cache das ergebnis für die
    anderen 3 Felder zurückliefert.
     
    Geht das nicht per Join? Muss ich für jedes Feld einen Subselect auf ein
    Feld der TVFunction machen, um an die (mehreren) Felder der Function
    ranzukommen?
     
    Gruss
    Henry
     
     

    [MVP Office Access]
    Freitag, 30. Juli 2010 10:34

Antworten

  • Hallo Henry

    das geht mit dem APPLY Operator, Beispiel:

    SELECT *

    FROM sys.sysobjects AS OBJ

         CROSS APPLY fn_my_permissions(OBJ.name, 'OBJECT')

     


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 30. Juli 2010 10:43

Alle Antworten

  • Hallo Henry

    das geht mit dem APPLY Operator, Beispiel:

    SELECT *

    FROM sys.sysobjects AS OBJ

         CROSS APPLY fn_my_permissions(OBJ.name, 'OBJECT')

     


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Freitag, 30. Juli 2010 10:43
  • Hallo Olaf
     
    Danke schön.
     
    Gruss
    Henry
     
    Olaf Helper wrote:
    > Hallo Henry
    >
    > das geht mit dem APPLY Operator, Beispiel:
    >
    > SELECT *
    >
    > FROM sys.sysobjects AS OBJ
    >
    > CROSS APPLY fn_my_permissions(OBJ.name, 'OBJECT')
     
     

    [MVP Office Access]
    Dienstag, 3. August 2010 07:04