Wykonywanie funkcji zdefiniowanej przez użytkownika (aparat bazy danych)

Funkcje zdefiniowane przez użytkownika mogą być wywoływane w kwerendach lub w innych sprawozdań lub wyrażeń, takich jak kolumny obliczane lub ciąg wyrażenia.Wartości skalarnej funkcji może być wykonywany przy użyciu instrukcja EXECUTE.

Wywoływanie funkcji zdefiniowanej przez użytkownika, które zwracają wartość skalarną

Można wywołać funkcja zdefiniowanej przez użytkownika zwracającej wartość wartość skalarna, gdziekolwiek dozwolony wartość skalarna wyrażenie typu danych w Transact-SQL instrukcji.Można wywołać funkcja skalarnej valued, używając co najmniej dwóch części nazwę funkcja.Aby uzyskać więcej informacji na temat nazw wieloczęściowe Zobacz Konwencje składni języka Transact-SQL (Transact-SQL).

Zapytania

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

  • Jako expression w select_list instrukcja SELECT:

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

    USE AdventureWorks2008R2;
    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 grupy według klauzula.

  • Jako order_by_expression w kolejności według klauzula.

  • Jako expression w klauzula SET w instrukcja UPDATE:

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

    Funkcje zdefiniowane przez użytkownika w tych lokalizacjach są logicznie wykonywany czas na wiersz.

Ograniczenia CHECK

Funkcje zdefiniowane przez użytkownika, które zwracają wartości wartość skalarna można wywołać w ograniczeń CHECK, jeśli wartości argumentu przekazany do funkcja odwołanie kolumny tylko tabela lub stałych.Każdy czas procesor kwerend sprawdza ograniczenia, procesor kwerend wywołuje funkcja z wartościami argumentu skojarzonych z bieżącym wierszu sprawdzana jest.Właściciel tabela musi być również właściciela zdefiniowanej przez użytkownika funkcja wywoływany przez ograniczenie typu CHECK dla tabela.

Definicje domyślne

Funkcje zdefiniowane przez użytkownika mogą być wywoływane jako constant_expression domyślnych definicje wartości argumentu przekazany do funkcja tylko zawierać stałe.Właściciel tabela musi być również właściciela zdefiniowanej przez użytkownika funkcja wywoływany przez DOMYŚLNEJ definicji tabela.

Kolumny obliczane

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

Operatory przypisania

Operatory przypisania (left_operand = right_operand) mogą wywoływać funkcje zdefiniowane przez użytkownika zwracające wartość wartość skalarna wyrażenie określona jako prawy operand.

Instrukcji kontroli przepływu

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

Wyrażenia sprawy

W każdym przypadku wyrażeń można wywołać funkcji zdefiniowanej przez użytkownika, które zwracają wartość wartość skalarna.

Drukowanie wyciągów

Funkcje zdefiniowane przez użytkownika, które zwracają ciąg znaków może być wywołany jako string_expr wyrażenie wydruku sprawozdania.

Funkcje i procedury przechowywane

  • Argumenty funkcja może być również odwołanie do funkcja zdefiniowanej przez użytkownika zwracającej wartooć wartość skalarna.

  • Zwraca integer_expression instrukcji w procedury przechowywane mogą wywoływać funkcje zdefiniowane przez użytkownika, które zwracają całkowitą jako integer_expression.

  • Zwraca return_type_spec instrukcji w funkcja zdefiniowanych przez użytkownika można wywoływać funkcje zdefiniowane przez użytkownika, które zwrotu typu danych wartość skalarna, takich jak return_type_spec, pod warunkiem że wartość zwracaną przez funkcja wywoływanego przez użytkownika można niejawnie konwertować na typ danych zwracanej wywoływania funkcja.

Wykonywanie funkcji zdefiniowanej przez użytkownika, które zwracają wartość skalarną

Można wykonać zdefiniowanej przez użytkownika funkcji zwracających wartości wartość skalarna w taki sam sposób jak przechowywane procedury.Podczas wykonywania funkcja zdefiniowanej przez użytkownika zwracającej wartość wartość skalarna, parametry są określone w taki sam sposób, są one procedur przechowywanych:

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

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

  • Jeżeli nie określono parametru nazwy, wartości argumentu nie muszą być w tej samej sekwencji jako parametry.

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

IF OBJECT_ID(N'dbo.ufn_CubicVolume', N'FN') IS NOT NULL
    DROP FUNCTION dbo.ufn_CubicVolume;
GO
CREATE FUNCTION dbo.ufn_CubicVolume
-- Input dimensions in centimeters.
   (@CubeLength decimal(4,1), @CubeWidth decimal(4,1),
    @CubeHeight decimal(4,1) )
RETURNS decimal(12,3) -- Cubic Centimeters.
WITH SCHEMABINDING
AS
BEGIN
   RETURN ( @CubeLength * @CubeWidth * @CubeHeight )
END;
GO

Poniższy przykład wykonuje dbo.ufn_CubicVolume funkcja.Za pomocą Transact-SQL instrukcja EXECUTE argumenty są identyfikowane w kolejności różni się od parametrów w definicji funkcja:

DECLARE @MyDecimalVar decimal(12,3);
EXEC @MyDecimalVar = dbo.ufn_CubicVolume @CubeLength = 12.3,
                        @CubeHeight = 4.5, @CubeWidth = 4.5;
SELECT @MyDecimalVar;
GO

Poniższy przykład wykonuje dbo.ufn_CubicVolume funkcja bez określania nazwy parametrów:

DECLARE @MyDecimalVar decimal(12,3);
EXEC @MyDecimalVar = dbo.ufn_CubicVolume 12.3, 4.5, 4.5;
SELECT @MyDecimalVar;
GO

Składnia WYWOŁANIA ODBC umożliwia wykonać 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 User-defined że zwracają tabela typ danych

Można wywołać funkcja zdefiniowanej przez użytkownika, która zwraca table Zaznacz gdzie wyrażeń tabela są dozwolone w klauzula FROM, WSTAWIANIA, aktualizacji lub usuwania sprawozdania.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.

USE AdventureWorks2008R2;
GO
SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(1209);
GO
SELECT ContactID, FirstName, LastName, JobTitle, ContactType
FROM dbo.ufnGetContactInformation(5);
GO

Po wywołaniu funkcja zdefiniowanej przez użytkownika, która zwraca tabela w klauzula FROM podzapytanie, argumenty funkcja nie można odwoływać się żadnych kolumn z zewnętrznej kwerendy.

Kursory statyczne, tylko do odczytu są jedynym typem kursor, który można otworzyć w klauzula FROM, którego dotyczy funkcja zdefiniowanej przez użytkownika, która zwraca tabela instrukcja SELECT.

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

Wywoływanie funkcji wbudowanych oródwierszową

Istnieje kilka wbudowanych oródwierszową funkcje, które zwracają wartość tabela.Wywołania tych wbudowanych funkcji zdefiniowanej przez użytkownika może być albo unqualifed albo za pomocą sys kwalifikator schematu.Należy używać sys kwalifikator schemat wbudowany tabela-wycenione funkcji, ponieważ zapobiega konfliktom z funkcji zdefiniowanych przez użytkownika o tej samej nazwie.Poniższy przykład pokazuje sposób wywołać funkcja wbudowanych systemu fn_helpcollations.

SELECT *
FROM sys.fn_helpcollations();
GO

Przy użyciu funkcji oródwierszową wskazówki

Tworzenie funkcja zdefiniowanej przez użytkownika, można zastosować wskazówka tabela w kwerendach, które tworzą definicji funkcja.Wskazówki, stosowany do widoków, które odwołują się do Transact-SQL tabela-funkcje wyceniane są również stosowane do funkcji.Funkcje te mogą powodować konflikt z podpowiedzi w definicji funkcja.Aby uzyskać więcej informacji, zobacz Rozdzielczość widoku.

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

Ostrzeżenie

Zdolność Aparat baz danych do zastosowania wskazówek na temat widoków do multi-statement tabela-ważnych funkcji, które są częścią definicji widoku zostaną usunięte w przyszłej wersja SQL Server.

Nie można zastosować wskazówka tabela wynik każdej funkcja zwracająca tabelę w klauzula FROM kwerendy.