Udostępnij za pośrednictwem


Executing User-Defined Functions (Database Engine)

W kwerendach lub w innych instrukcji lub wyrażeń, takich jak obliczane kolumny lub wyrażenia, ciąg znaków, można wywołać funkcji zdefiniowanych przez użytkownika.Wartości wartość skalarna funkcji mogą być wykonać przy użyciu instrukcja wykonać.

Funkcje zdefiniowane przez użytkownika, które zwracają wartość skalarne wywoływania

Zdefiniowaną przez użytkownika funkcję, która zwraca wartość skalarną, można wywołać w każdym miejscu, w którym w instrukcjach Transact-SQL jest dozwolone używanie wyrażenia skalarnego mającego taki sam typ danych.Funkcje skalarne muszą być wywoływane przy użyciu co najmniej dwuczęściowej nazwy funkcji.Aby uzyskać więcej informacji dotyczących nazw wieloczęściowych, zobacz temat Transact-SQL Syntax Conventions (Transact-SQL).

Kwerendy

Funkcje zdefiniowane przez użytkownika, które zwracają wartości wartość skalarna są dozwolone w następujących lokalizacjach:

  • Jak expression w select_list instrukcja SELECT:

    USE AdventureWorks;
    GO
    SELECT ProductID, ListPrice, dbo.ufnGetProductDealerPrice(ProductID, StartDate) AS DealerPrice,
        StartDate, EndDate
    FROM Production.ProductListPriceHistory
    WHERE ListPrice > .0000
    ORDER BY ProductID, StartDate;
    GO
    
  • Jak expression lub string_expression WHERE lub HAVING predykat klauzula:

    USE AdventureWorks;
    GO
    SELECT ProductID, ListPrice, StartDate, EndDate
    FROM Production.ProductListPriceHistory
    WHERE dbo.ufnGetProductDealerPrice(ProductID, StartDate) > .0000
    ORDER BY ProductID, StartDate;
    GO
    
  • Jako group_by_expression w klauzula GROUP BY.

  • Jak order_by_expression w klauzula ORDER BY.

  • Jak expression w klauzula zestaw za pomocą instrukcja UPDATE:

    USE AdventureWorks;
    GO
    UPDATE Production.ProductListPriceHistory
    SET ListPrice = dbo.ufnGetProductDealerPrice(ProductID, StartDate)
    WHERE ProductID > 900;
    GO
    
  • Jak expression w klauzula VALUES instrukcja INSERT:

    Funkcje zdefiniowane przez użytkownika, do których odwołują się te lokalizacje są logicznie wykonywany czas na wiersz.

Ograniczenia CHECK

Funkcje zdefiniowane przez użytkownika, które zwracają wartości wartość skalarna może być wywoływana w ograniczeń typu CHECK, jeśli wartości argumentu przekazany do kolumn funkcja odwołanie tylko w tabela lub stałych.Przy każdym procesor kwerend sprawdza, czy ograniczenie, procesor kwerend wywołuje funkcja z wartościami argumentu skojarzonych z bieżącym wierszem sprawdzania.Właściciel tabela także musi być właścicielem funkcja zdefiniowanej przez użytkownika, wywoływany przez ograniczenie CHECK dla tabela.

Definicje DEFAULT

Funkcje zdefiniowane przez użytkownika może być wywołany jako constant_expression DEFAULT definicje, jeśli wartości argumentu przekazany do funkcja zawierać tylko stałe. Właściciel tabela, należy również właściciela funkcja zdefiniowanej przez użytkownika, wywoływany przez DOMYŚLNĄ definicją w tabela.

Kolumny obliczanej

Funkcje mogą być wywoływane przez kolumny obliczane, jeśli wartości argumentu przekazany do funkcja odwołanie tylko kolumn w tabela lub stałych.Właściciel tabela, należy również właściciela funkcja zdefiniowanej przez użytkownika, wywoływany przez kolumna obliczana w tabela.

Operatory przypisania

() Operatory przypisanialeft_operand = right_operand) mogą wywoływać funkcje zdefiniowane przez użytkownika zwracające wartość wartość skalarna w wyrażeniu określony jako prawy operand.

Deklaracje formantu z przepływu

Funkcje zdefiniowane przez użytkownika, które zwracają wartości wartość skalarna mogą być wywoływane przez instrukcji kontroli przepływu w ich wyrażeń logicznych.

Wyrażenia przypadek

W każdym z przypadków wyrażenia można wywołać funkcji zdefiniowanych przez użytkownika zwracające wartość wartość skalarna.

Instrukcje drukowania

Funkcje zdefiniowane przez użytkownika, który zwraca ciąg znaków może być wywołany jako string_expr wyrażenie PRINT instrukcji.

Funkcje i procedury przechowywane

  • Argumenty funkcja może być również odwołanie do funkcja zdefiniowanej przez użytkownika, która zwraca wartość wartość skalarna.

  • ZWROT integer_expression instrukcje w procedury przechowywane mogą wywoływać funkcje zdefiniowane przez użytkownika, który zwraca liczbę całkowitą z zakresu jako integer_expression.

  • ZWROT return_type_spec instrukcje w funkcja zdefiniowanych przez użytkownika mogą wywoływać funkcje zdefiniowane przez użytkownika zwracające takie jak typ danych wartość skalarna return_type_spec, pod warunkiem, że wartość zwracana przez funkcja zdefiniowaną przez użytkownika wywoływanego można niejawnie przekonwertować na typ zwracanych danych wywoływania funkcja.

Wykonuje funkcje zdefiniowane przez użytkownika, które zwracają wartość skalarne

Można wykonać funkcji zdefiniowanych przez użytkownika, które zwracają wartości wartość skalarna w taki sam sposób, procedury przechowywane jako.Podczas wykonywania funkcja zdefiniowanej przez użytkownika, która zwraca wartość wartość skalarna, parametry są określane w taki sam sposób, jak są one procedur przechowywanych:

  • Wartości argumentu nie są ujęte w nawiasy.

  • Można określić nazwy parametrów.

  • Jeżeli określono parametr nazwy wartości argumentu nie muszą znajdować się w tej samej sekwencji jako parametry.

Poniższy przykład tworzy funkcja zdefiniowanej przez użytkownika zwracającej wartość wartość skalarna dziesiętną.

W poniższym przykładzie wykonywany dbo.ufn_CubicVolume Funkcja. Za pomocą Transact-SQL Instrukcja wykonać argumentów są określone w zamówieniu różni się od parametrów w definicji funkcja:

W poniższym przykładzie wykonywany dbo.ufn_CubicVolume Funkcja bez określania nazwy parametrów:

Składnia ODBC CALL można użyć również do wykonywania dbo.ufn_CubicVolume funkcja z aplikacji OLE DB lub ODBC:

-- First use SQLBindParam to bind the return value parameter marker
-- to a program variable of the appropriate type
SQLExecDirect(hstmt,
              "{ CALL ? = dbo.ufn_CubicVolume(12.3, 4.5, 4.5) }",
              SQL_NTS);

Wywoływanie zdefiniowane przez użytkownika funkcje które zwrotu tabela typ danych

Można wywołać funkcja zdefiniowanej przez użytkownika, która zwraca table w przypadku, gdy tabela wyrażenia są dozwolone w klauzula FROM SELECT, INSERT, UPDATE lub DELETE instrukcji. Wywołanie funkcja zdefiniowanej przez użytkownika, która zwraca tabela może nastąpić alias tabela opcjonalne.Poniższy przykład ilustruje telefonicznej funkcja zwracająca tabelę dbo.ufnGetContactInformation w klauzula FROM instrukcja SELECT.

Jeśli w klauzula FROM podkwerenda wywoływana jest funkcja zdefiniowana przez użytkownika, która zwraca tabela, argumenty funkcji nie mogą odwoływać się żadnych kolumn z zewnętrznej kwerendy.

Kursory statyczne, tylko do odczytu są to jedyny typ kursor, które mogą być otwierane w instrukcja SELECT, którego klauzula FROM dotyczy funkcja zdefiniowanej przez użytkownika, która zwraca tabela.

Instrukcja SELECT, która odwołuje się do funkcja zdefiniowanej przez użytkownika, która zwraca table wywołuje funkcja jeden raz.

Wywoływanie wbudowane funkcje wycenione tabela

Istnieje kilka wbudowanych wycenione tabela funkcje, które zwracają wartość tabela.Wywołanie wbudowanych funkcji zdefiniowanych przez użytkownika mogą być albo unqualifed lub można użyć sys kwalifikator schematu.Należy używać sys kwalifikator schematu dla wbudowanych funkcji wycenione tabela, ponieważ uniemożliwia powoduje konflikt z funkcji zdefiniowanych przez użytkownika o takiej samej nazwie.W poniższym przykładzie pokazano, jak wywoływanie funkcja wbudowanych systemu fn_helpcollations.

Wskazówki dotyczące serwerów przy użyciu wartości z tabela funkcje

Po utworzeniu funkcja zdefiniowanej przez użytkownika, można zastosować wskazówka tabela, w dowolnej kwerendy, które tworzą definicji funkcja.Zastosowane do widoków, które odwołują się do wskazówek Transact-SQL wartości tabela funkcje są również stosowane do funkcji. Funkcje te mogą powodować konflikt z wskazówki w definicji funkcja.Aby uzyskać więcej informacji zobaczWyświetl rozwiązanie.

Nie można zastosować wskazówki na temat widoków, które odwołują się do środowiska CLR wycenione tabela funkcji.

Uwaga

Zdolność Database Engine Aby zastosować wskazówki na temat widoków multi-instrukcja wycenione tabela funkcje, które są częścią definicji widoku zostaną usunięte w przyszłej wersja programu SQL Server.

Nie można zastosować wskazówkę dotyczącą tabela do wyniku dowolnej funkcja wycenione tabela w klauzula FROM kwerendy.