Announcement

Collapse
No announcement yet.

Deterministische UDF

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Deterministische UDF

    Hallo,

    ist es möglich, eine deterministische UDF zu erstellen, die einen Select ausführt. Z.B.

    create function dbo.fn_Test (@ID uniqueidentifier)
    returns uniqueidentifier
    with schemabinding
    as
    begin
    Return (Select Top 1 AndereID From dbo.Test Where [ID] = @ID)
    end

    Hoffe Ihr könnt mir helfen...

    Gruß
    Thomas

    p.s.: Falls es hilft, so könntet ihr es abfragen, ob die Function deterministisch ist: SELECT OBJECTPROPERTY(OBJECT_ID('fn_test'), 'IsDeterministic')

  • #2
    Hallo,

    abgesehen von der Frage, ob es sinnvoll ist, die Kennzeichnung <i>IsDeterministic</i> "umzudrehen", kann dieses Attribut bei der Implementierung einer CLR-UDF (SQLCLR) in eigener Regie gesetzt werden:

    <font face="Courier New">&lt;SqlFunction(<font color="#FF0000">IsDeterministic:=True</font>)&gt;
    </font>

    Während der SQL Server bei einer SQL-UDF die Einordung automatisch übernimmt, muss der Entwickler bei einer SQLCLR-UDF das Verhalten selbst über das Attribut bekanntgeben ;-

    Comment


    • #3
      Hallo Andreas Kosch,

      ist es auch möglich, bei einer SQL-UDF diese Einordnung vorzunehmen?

      Denn der Wert, der durch diese Funktion zurückgegeben wird, wird sich in diesem Fall niemals ändern...

      Gruß
      Thomas

      p.s.: Ich nutze den SQL Server 2000

      Comment


      • #4
        Hallo,

        &gt;..ist es auch möglich, bei einer SQL-UDF diese Einordnung vorzunehmen?

        nein. Bei einer SQL-UDF nimmt der SQL Server selbst diese Einordnung vor

        Comment


        • #5
          Hallo,

          ok, danke. Das ist die Antwort, nach der ich gesucht habe ...

          Dann bleibt mir nix anderes übrig als meine DB ein bissle umzubauen...

          Danke nochmal

          Gruß
          Thoma

          Comment


          • #6
            Kann mir jemand erklären, wozu das gut sein soll? Habe mir im Wiki die Erklärung zu deterministisch und determiniert angesehen und auch verstanden, denke ich mal. Kann allerdings in der Praxis, also speziell bezogen auf die UDF, nicht herausfinden, welche Bedeutung dieser Wert hat.<br>
            servus,
            Helmu

            Comment


            • #7
              Hallo,

              ich wollte eine Spalte in einer Tabelle anlegen: Diese sollte als Formel eine Funktion haben. Hat soweit auch funktioniert. Nun wollte ich mit dieser und einer weiteren Spalte einen Unique-Key erstellen. Dies wird aber nur zugelassen, wenn die Funktion eben deterministisch ist... Das war der Grund... und da dies jetzt nicht funktioniert, muss ich die Datenbank nun umbauen und eine "echte" Spalte daraus machen und die will nun gefüllt werden und und und... Aber das war mein Anliegen...

              Hoffe das Dir das nun als Erklärung reicht

              Gruß
              Thoma

              Comment


              • #8
                Okay, danke, jetzt weiß ich wenigstens, wo das gebraucht wird. Habe mal ein bisschen mit den UDF herumgespielt, aber es war mir nicht möglich, eine deterministische UDF zu erstellen. Gibt es die überhaupt?
                Selbst eine UDF ohne Parameter und mit nur einer einzigen Zeile, nämlich "return 41", wird als nichtdeterministisch abgelegt. Habe ich da was missverstanden?<br>
                servus,
                Helmu

                Comment


                • #9
                  Hallo Helmut,

                  versuch mal folgende Function:

                  Alter function dbo.Get_Test
                  (@Para1 int, @Para2 int)
                  returns int
                  with schemabinding
                  as
                  begin
                  Declare @Ergebnis int

                  Set @Ergebnis = @Para1 * @Para2

                  return @Ergebnis

                  end
                  GO

                  SELECT OBJECTPROPERTY(OBJECT_ID('Get_Test'), 'IsDeterministic')

                  Gruß
                  Thoma

                  Comment


                  • #10
                    Okay - WITH SCHEMABINDING - ist das Zauberwort, ansonsten ist es nichtdeterministisch.<br>
                    danke,
                    Helmu

                    Comment

                    Working...
                    X