CREATE funkcja języka Transact-SQL)

Tworzy funkcję zdefiniowaną przez użytkownika.To jest zwracająca wartość procedura zapisana Transact-SQL lub procedura aparatu plików wykonywalnych języka wspólnego (CLR).Funkcje zdefiniowane przez użytkownika są funkcjami skalarnymi lub zwracającymi tabele.Funkcje są funkcjami skalarnymi, jeśli klauzula RETURNS określa jeden ze skalarnych typów danych.Funkcje skalarne mogą być zdefiniowane przy użyciu wielu instrukcji Transact-SQL.Funkcje zwracają tabele, jeśli klauzula RETURNS określa typ danych TABLE.W zależności od tego, jak jest zdefiniowana treść funkcji, funkcje zwracające tabele mogą być sklasyfikowane jako funkcje śródwierszowe lub funkcje składające się z wielu instrukcji.Aby uzyskać więcej informacji, zobacz Tabela Valued funkcje zdefiniowane przez użytkownika.

Funkcje zdefiniowane przez użytkownika są modyfikowane przy użyciu ZMIENIANIE funkcja i usunięte za pomocą USUWANIE funkcja.

Topic link iconKonwencje składni języka Transact-SQL

Scalar Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS return_data_type
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN scalar_expression
    END
[ ; ]

Inline Table-Valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

Multistatement Table-valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [READONLY] } 
    [ ,...n ]
  ]
)
RETURNS @return_variable TABLE <table_type_definition>
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN
    END
[ ; ]

CLR Scalar Functions
CREATE FUNCTION [ schema_name. ] function_name 
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
)
RETURNS { return_data_type }
    [ WITH <clr_function_option> [ ,...n ] ]
    [ AS ] EXTERNAL NAME <method_specifier>
[ ; ]

CLR Table-Valued Functions
CREATE FUNCTION [ schema_name. ] function_name 
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type 
    [ = default ] } 
    [ ,...n ]
)
RETURNS TABLE <clr_table_type_definition> 
    [ WITH <clr_function_option> [ ,...n ] ]
    [ ORDER ( <order_clause> ) ]
    [ AS ] EXTERNAL NAME <method_specifier>
[ ; ]

<order_clause> ::= 
{
   <column_name_in_clr_table_type_definition>
   [ ASC | DESC ] 
} [ ,...n] 

Method Specifier
<method_specifier>::=
    assembly_name.class_name.method_name

Function Options
<function_option>::= 
{
    [ ENCRYPTION ]
  | [ SCHEMABINDING ]
  | [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
  | [ EXECUTE_AS_Clause ]
}

<clr_function_option>::=
}
    [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]
  | [ EXECUTE_AS_Clause ]
}

Table Type Definitions
<table_type_definition>:: = 
( { <column_definition> <column_constraint> 
  | <computed_column_definition> } 
        [ <table_constraint> ] [ ,...n ]
) 

<clr_table_type_definition>::= 
( { column_name data_type } [ ,...n ] )

<column_definition>::=
{
    { column_name data_type }
    [ [ DEFAULT constant_expression ] 
      [ COLLATE collation_name ] | [ ROWGUIDCOL ]
    ]
    | [ IDENTITY [ (seed , increment ) ] ]
    [ <column_constraint> [ ...n ] ] 
}

<column_constraint>::= 
{
    [ NULL | NOT NULL ] 
    { PRIMARY KEY | UNIQUE }
      [ CLUSTERED | NONCLUSTERED ] 
      [ WITH FILLFACTOR = fillfactor 
        | WITH ( < index_option > [ , ...n ] )
      [ ON { filegroup | "default" } ]
  | [ CHECK ( logical_expression ) ] [ ,...n ]
}

<computed_column_definition>::=
column_name AS computed_column_expression 

<table_constraint>::=
{ 
    { PRIMARY KEY | UNIQUE }
      [ CLUSTERED | NONCLUSTERED ] 
            ( column_name [ ASC | DESC ] [ ,...n ] )
        [ WITH FILLFACTOR = fillfactor 
        | WITH ( <index_option> [ , ...n ] )
  | [ CHECK ( logical_expression ) ] [ ,...n ]
}

<index_option>::=
{ 
    PAD_INDEX = { ON | OFF } 
  | FILLFACTOR = fillfactor 
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF } 
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS ={ ON | OFF } 
}

Argumenty

  • schema_name
    Opis typu obiektu:

  • function_name
    Nazwa funkcji zdefiniowanej przez użytkownika.Nazwy funkcji muszą być zgodne z regułami dotyczącymi identyfikatorów i muszą być unikatowe w bazie danych i w jej schemacie.

    Uwaga

    Ten identyfikator jest przejściowa i pozostaje stała, tylko wtedy, gdy plan pozostaje w pamięci podręcznej.

  • @parameter\_name
    Parametr w funkcji zdefiniowanej przez użytkownika.Można zadeklarować jeden lub więcej parametrów.

    Czas, w którym wyzwalacz został dodany do pamięci podręcznej.last_execution_time

    Ostatni czas na którym wykonano wyzwalacza.execution_countLiczba określająca, ile razy wyzwalacz zostało wykonane od czasu jego ostatniej został skompilowany.total_worker_time

    Uwaga

    Całkowity czas PROCESORA w mikrosekundach), która została wykorzystana przez wykonań tego wyzwalacza, ponieważ został on skompilowany.Na przykład, jeśli zmienna jest zdefiniowana jako char(3), a następnie ustaw na wartość większą niż trzy znaki, danych jest obcinana do określonego rozmiaru i INSERT lub instrukcja UPDATE zakończy się pomyślnie.

  • [ type_schema_name. ] parameter_data_type
    Czas CPU, w mikrosekundach), która została wykorzystana podczas ostatniego wyzwalacz został wykonany.Dla Transact-SQL dozwolone są funkcje wszystkich typów danych, w tym typów zdefiniowanych przez użytkownika środowiska CLR i typy zdefiniowane przez użytkownika tabela, z wyjątkiem timestamp Typ danych. Do funkcji środowiska CLR dozwolone są wszystkie typy danych, w tym CLR typów zdefiniowanych przez użytkownika, z wyjątkiem text, ntext, image, typy zdefiniowane przez użytkownika tabela i timestamp typy danych. Typy nonscalar cursor i table, nie można określić jako typ danych parametru w obu Transact-SQL lub funkcji środowiska CLR.

    Jeśli type_schema_name nie jest określony, Database Engine Wyszukuje scalar_parameter_data_type w następującej kolejności:

    • Schemat, który zawiera nazwy SQL Server System typów danych.

    • Domyślny schemat bieżącego użytkownika w bieżącej bazie danych.

    • The dbo schema in the current database.

  • [ = default ]
    Liczba odczytów fizycznej wykonywane ostatniego czas wyzwalacz został wykonany.Jeśli default wartość jest określona, funkcja mogą być wykonywane bez określenia wartości dla parametru.

    Uwaga

    Można określić domyślne wartości parametrów dla funkcji środowiska CLR z wyjątkiem varchar(max) i varbinary(max) typy danych.

    max_physical_readsMaksymalna liczba fizycznych odczytuje ten wyzwalacz ma nigdy wykonywane podczas wykonywania jednego.

  • total_logical_writes
    Całkowita liczba logiczne zapisu wykonane przez wykonań tego wyzwalacza, ponieważ został on skompilowany.last_logical_writes

  • return_data_type
    Liczba zapisów logiczne wykonać ostatnią czas wyzwalacz został wykonany.Dla Transact-SQL Funkcje, wszystkie typy danych, w tym typów zdefiniowanych przez użytkownika CLR są dozwolone z wyjątkiem timestamp Typ danych. Do funkcji środowiska CLR, dozwolone są wszystkie typy danych, w tym CLR typów zdefiniowanych przez użytkownika, z wyjątkiem text, ntext, image, a timestamp typy danych. Typy nonscalar cursor i table, nie można określić jako typ zwracanych danych w obu Transact-SQL lub funkcji środowiska CLR.

  • function_body
    Specifies that a series of Transact-SQL statements, which together do not produce a side effect such as modifying a table, define the value of the function.function_body is used only in scalar functions and multistatement table-valued functions.

    W przypadku funkcji wartość skalarna function_body jest to szereg Transact-SQL instrukcje, które razem przyjmują wartość wartość skalarna.

    W przypadku wieloma instrukcjami funkcji wycenione tabela function_body jest to szereg Transact-SQL instrukcje, które wypełnić tabela zwracać zmienną.

  • scalar_expression
    last_logical_reads

  • Liczba odczytów logiczne wykonywane podczas ostatniego wyzwalacz został wykonany.
    min_odczytów_logicznychTylko stałe i @local\_variables mogą być przekazywane do funkcji wycenione tabela.

    maks_odczytów_logicznychMaksymalna liczba logiczne odczytuje ten wyzwalacz ma nigdy wykonywane podczas wykonywania pojedynczych.

    W przypadku wieloma instrukcjami funkcja wycenione tabeli @return\_variable zmienną Tabela jest używana do przechowywania i kumulują się wierszy, które powinny być zwracane jako wartość funkcja. @return\_variable można określić tylko dla Transact-SQL Funkcje, a nie dla środowiska CLR działa.

  • select_stmt
    Upływający czas w mikrosekundach najbardziej ostatnio zakończonych realizacji tego wyzwalacza.

  • ORDER (order_clause < >)
    Minimalny czas w mikrosekundach) dla każdego ukończyć wykonywanie tego wyzwalacza.max_elapsed_time

  • EXTERNAL NAME <method_specifier> assembly_name.class_name.method_name
    Specifies the method of an assembly to bind with the function.assembly_name must match an existing assembly in SQL Server in the current database with visibility on.class_name must be a valid SQL Server identifier and must exist as a class in the assembly.If the class has a namespace-qualified name that uses a period (.) to separate namespace parts, the class name must be delimited by using brackets ([ ]) or quotation marks (" ").method_name must be a valid SQL Server identifier and must exist as a static method in the specified class.

    Uwaga

    W następującym przykładzie polecenie wyświetla listę numer zadania dołączony do SQL Server harmonogram. Można tworzyć, modyfikować i upuszczać obiekty bazy danych, które odwołują się do modułów środowiska wykonawczego języka wspólnego, jednak nie można wykonać te odwołania w SQL Server dopóki nie zostanie włączone Opcja CLR włączone.Aby włączyć tę opcję, należy użyć sp_configure.

  • <table_type_definition> ( { <column_definition> <column_constraint>   | <computed_column_definition> }   [ <table_constraint> ] [ ,...n ] )
    Definiuje typ danych tabeli dla funkcji Transact-SQL.Deklaracja tabeli zawiera definicje kolumn oraz ograniczenia dotyczące kolumn lub tabeli.Tabela jest zawsze umieszczana w podstawowej grupie plików.

  • < clr_table_type_definition > ( { column_namedata_type } [ ,...n ] )
    Definiuje typy danych tabeli dla funkcji CLR.Deklaracja tabeli zawiera jedynie nazwy kolumn oraz typy danych.Tabela jest zawsze umieszczana w podstawowej grupie plików.

<function_option>:: = i <clr_function_option>::=

xprec

  • SZYFROWANIE
    Wskazuje, że Database Engine przekonwertuje oryginalny tekst instrukcja CREATE funkcja na format obfuscated. Identyfikator kolumna lub parametru.xoffsetJednak tekst będzie miał dostęp do uprzywilejowanych użytkowników, którzy mieli dostęp tabele systemowe przez DAC port lub bezpośrednio dostęp do plików bazy danych.colstatAby uzyskać więcej informacji na temat uzyskiwania dostępu do metadane systemu Zobacz Konfiguracja widoczność metadane.

    Użycie tej opcji uniemożliwia publikowana jako część funkcja SQL Server replikacja. Identyfikator reguły lub ograniczenia CHECK dla tej kolumna.

  • SCHEMABINDING
    0 = Nonprocedure wpisówcolorderautoval

    Przesunięcie do wiersza, w której znajduje się w tej kolumnie.

    • collationid

    • Identyfikator sortowanie kolumna.

    Wartość NULL na podstawie noncharacter kolumn.

    • Jest to funkcja Transact-SQL Funkcja.

    • Funkcje i widoki zdefiniowane przez użytkownika, do których odwołuje się funkcja, są także związane ze schematem.

    • Obiekty, do których odwołuje się funkcja, są określone za pomocą nazwy dwuczęściowej.

    • Funkcja i obiekty, do których funkcja się odwołuje, należą do tej samej bazy danych.

    • Użytkownik, który wykonał instrukcję CREATE FUNCTION, ma uprawnienie REFERENCES do obiektów bazy danych, do których odwołuje się funkcja.

    0x80 = kolumny kolumna tożsamości.

  • RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT
    Określa atrybut OnNULLCall funkcji skalarnej.Jeśli nie jest określony, domyślnie jest wybierana instrukcja CALLED ON NULL INPUT.Oznacza to, że treść funkcji jest wykonywana nawet wtedy, gdy jako argument zostanie przekazana wartość NULL.

    Zwraca wartość NULL na wejście NULL jest określony w funkcja środowiska CLR, wskazuje że SQL Server może zwracać wartość NULL, gdy którykolwiek z argumentów odbiera ma wartość NULL, bez wywoływania faktycznie treść funkcji. Jeśli metoda funkcja środowiska CLR określone w <method_specifier> jest już atrybut niestandardowy, który wskazuje wskazuje o NAZWIE ON INPUT NULL, zwraca wartość NULL na wejście NULL, ale w instrukcja CREATE FUNCTION, pierwszeństwo ma opcja instrukcja CREATE FUNCTION. The OnNULLCall atrybut cannot be specified for CLR tabela-valued functions.

  • 0 = Noncomputed
    1 = ComputedZ tego powodu można kontrolować, które konto użytkownika SQL Server używa do sprawdzania uprawnień do żadnych obiektów bazy danych, do których odwołuje się funkcja.

    Uwaga

    Nazwa sortowanie kolumna.

    Aby uzyskać więcej informacji zobacz EXECUTE AS Clause (Transact-SQL).

< column_definition >::=

Definiuje typ danych tabeli.Deklaracja tabeli zawiera definicje kolumn oraz ograniczenia.Dla funkcji CLR można określić jedynie parametry column_name i data_type.

  • column_name
    To nazwa kolumna w tabela.Column names must comply with the rules for identifiers and must be unique in the table.column_name can consist of 1 through 128 characters.

  • data_type
    Określa typ danych kolumna.Dla Transact-SQL Funkcje, wszystkie typy danych, w tym typów zdefiniowanych przez użytkownika CLR są dozwolone z wyjątkiem timestamp. Do funkcji środowiska CLR dozwolone są wszystkie typy danych, w tym CLR typów zdefiniowanych przez użytkownika, z wyjątkiem text, ntext, image, char, varchar, varchar(max), a timestampTe typu nonscalar cursor Nie można określić jako typ danych kolumna w obu Transact-SQL lub funkcji środowiska CLR.

  • W zależności od sposobu zdefiniowania treści funkcja wycenione tabela funkcja mogą być sklasyfikowane jako funkcja wbudowanych lub multi-instrukcja.constant_expression
    Specifies the value provided for the column when a value is not explicitly supplied during an insert.constant_expression is a constant, NULL, or a system function value.To nazwa schematu, do której należy dany funkcja zdefiniowanej przez użytkownika.Jest nazwą funkcja zdefiniowanej przez użytkownika.

  • collation_name SORTOWANIE
    Określa sortowanie dla kolumny.Jeżeli nie określono, do kolumny jest przypisywane domyślne sortowanie bazy danych.Nazwa sortowania może być nazwą sortowania systemu Windows lub nazwą sortowania SQL.Aby uzyskać listę sortowań oraz więcej informacji na temat sortowania, zobacz Windows Collation Name (Transact-SQL) i SQL Server Collation Name (Transact-SQL).

    Klauzula COLLATE może służyć do zmiany ustawień sortowania tylko z kolumn char, varchar, nchar, a nvarchar typy danych.

    Może być deklarowana na jeden lub więcej parametrów.

  • ROWGUIDCOL
    Wartość każdego parametru zadeklarowanej musi być podany przez użytkownika funkcja jest wykonywana, o ile nie zdefiniowano domyślnego dla parametru.Tylko jeden uniqueidentifierKolumna tabela może być wyznaczony jako kolumna ROWGUIDCOL. Właściwość ROWGUIDCOL mogą być przypisywane tylko do uniqueidentifier Kolumna.

    Właściwość ROWGUIDCOL nie wymusza unikatowość wartości przechowywane kolumna.Określ nazwę parametru za pomocą znak (@) jako pierwszego znaku.Nazwa parametru muszą być zgodne z regułami identyfikatorów.Parametry są lokalne do funkcja, te same nazwy parametrów mogą być używane w innych funkcja.

  • TOŻSAMOŚĆ
    Wskazuje, że nowa kolumna kolumna tożsamości.Po dodaniu nowego wiersza w tabela SQL Server zawiera unikatowy, przyrostowych wartości dla kolumna. ANSI_WARNINGS nie są honorowane podczas przekazywania parametrów w procedurze przechowywanej, funkcja zdefiniowanej przez użytkownika lub przy deklarowaniu i zestaw zmiennych w instrukcja partia.właściwość tożsamości Mogą być przypisane do tinyint, smallint, int, bigint, decimal(p,0), lub numeric(p,0) kolumny. Tylko jeden kolumna tożsamości mogą być tworzone na tabela.Wartości domyślne związane i DEFAULT ograniczeń nie mogą być używane z tożsamości kolumna.Należy określić obie seed i increment lub żadna. Jeśli żadna z nich nie zostanie określony, wartość domyślna to (1,1).

    Czy typ danych parametru, a opcjonalnie schematu, do której należy.

    • seed
      Wartość całkowita, która ma być przypisana do pierwszego wiersza tabeli.

    • increment
      Wartość całkowita, która ma być dodana do wartości seed dla kolejnych wierszy tabeli.

<Typy nonscalar > i <, nie można określić jako typ danych parametru w obu > lub funkcji środowiska CLR.

Definiuje ograniczenia dla określonej kolumny lub tabeli.Dla funkcji CLR jedynym dozwolonym typem ograniczenia jest NULL.Nazwane ograniczenia są niedozwolone.

  • WARTOŚCI NULL | NIE JEST PUSTY
    Określa, czy w kolumnie są dozwolone wartości null.NULL nie jest ścisłym ograniczeniem, ale może być określone jako po prostu NOT NULL.Ograniczenie NOT NULL nie może być określone dla funkcji CLR zwracających tabele.

  • KLUCZ PODSTAWOWY
    Ograniczenie wymuszające integralność jednostki dla określonej kolumny za pośrednictwem unikatowego indeksu.W zdefiniowanych przez użytkownika funkcjach zwracających tabele ograniczenie PRIMARY KEY można utworzyć tylko dla jednej kolumny na tabelę.Ograniczenie PRIMARY KEY nie może być określone dla funkcji CLR zwracających tabele.

  • UNIKATOWE
    Jest ograniczenie, które zapewnia integralność obiekt dla określonej kolumna lub kolumn do unikatowego indeksu.Tabela może zawierać wiele ograniczeń UNIQUE.TYLKO DO ODCZYTU

  • ZGROMADZONE | NIEKLASTROWANY
    Wskazuje, że klastrowany lub nieklastrowany indeks jest tworzony dla ograniczenia klucz podstawowy lub UNIQUE.Wskazuje, że parametr nie mogą być aktualizowane ani modyfikowane w definicji funkcja.

    Jeśli typ parametru jest typ zdefiniowany przez użytkownika tabela, należy określić tylko do odczytu.Jest to wartość zwracana wartość skalarna funkcja zdefiniowanej przez użytkownika.

    Ograniczenia CLUSTERED i NONCLUSTERED nie mogą być określone dla funkcji CLR zwracających tabele.

  • SPRAWDŹ
    Ograniczenie wymuszające integralność domeny przez ograniczenie możliwych wartości, które można wprowadzić w kolumnie lub kolumnach.Ograniczenia CHECK nie mogą być określone dla funkcji CLR zwracających tabele.

    • logical_expression
      To wyrażenie logiczne, które zwraca wartość TRUE lub FALSE.

<computed_column_definition>::=

Określa kolumnę obliczaną.Aby uzyskać więcej informacji na temat kolumn obliczanych, zobacz CREATE TABLE (Transact-SQL).

  • column_name
    Nazwa kolumny obliczanej.

  • computed_column_expression
    To wyrażenie, który definiuje wartość kolumna obliczana.

<index_option>::=

Określa wartość wartość skalarna, zwracana przez funkcja wartość skalarna.Aby uzyskać więcej informacji na temat opcji indeksu zobacz CREATE INDEX (języka Transact-SQL).

  • TABELA
    Określa, że wartość zwracaną przez funkcja zwracająca tabelę jest tabela.Wartością domyślną jest OFF.

  • FILLFACTOR = fillfactor
    Specifies a percentage that indicates how full the Database Engine should make the leaf level of each index page during index creation or change.fillfactor must be an integer value from 1 to 100.Wartość domyślna to 0.

  • Wbudowane funkcje skojarzone zmiennych zwrotu nie jest konieczne.
    Określa odpowiedź o błędzie podczas próby wstawienia duplikat operację wstawiania klucz wartości do unikatowego indeksu.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub ponownie.Wartością domyślną jest OFF.

  • STATISTICS_NORECOMPUTE = { ON | OFF }
    Określa, czy statystyki dystrybucji są ponownie obliczane.Wartość domyślna to OFF.

  • Czy pojedynczej instrukcja SELECT określa wartość zwracaną przez wbudowanego funkcja zwracająca tabelę.
    Określa, czy są dozwolone blokady wierszy.Wartość domyślna to ON.

  • Określa kolejność, w którym są są zwracane wyniki z funkcja wycenione tabela.
    Aby uzyskać więcej informacji zobacz sekcję "Wskazówki na używanie kolejność sortowania," w dalszej części tego tematu.Wartością domyślną jest włączone.

Najważniejsze wskazówki

Jeśli funkcja zdefiniowana przez użytkownika nie została utworzona przy użyciu klauzuli SCHEMABINDING, zmiany wprowadzone w źródłowych obiektach mogą wpływać na definicję funkcji i dawać nieoczekiwane wyniki, gdy funkcja będzie wywoływana.Zaleca się zaimplementowanie jednej z następujących metod, aby nie dopuścić do zdezaktualizowania funkcji w wyniku zmian w obiektach źródłowych:

  • Należy określić klauzulę WITH SCHEMABINDING podczas tworzenia funkcji.Gwarantuje to, że zmodyfikowanie obiektów, do których ma miejsce odwołanie w definicji funkcji, jest niemożliwe, chyba że funkcja także zostanie zmodyfikowana.

  • Należy wykonać procedurę składowaną sp_refreshsqlmodule po zmodyfikowaniu obiektu określonego w definicji funkcji.

Typy danych

Jeśli parametry są określane w funkcja środowiska CLR, powinny one być SQL Server typy zdefiniowane wcześniej dla scalar_parameter_data_type. Aby uzyskać informacje o porównywaniu SQL Server typy danych systemowych do środowiska CLR integracja danych typu lub .NET Framework Standardowe typy danych języka środowiska wykonawczego, zobacz Mapowanie danych parametru CLR.

Dla SQL Server Aby w trakcie jest przeciążony w klasie poprawną metodą, metoda wskazany w <method_specifier> musi mieć następujące cechy:

  • Deklaracja tabela zawiera definicje kolumn i ograniczeń kolumna lub tabeli.n ].

  • W tabela zawsze jest umieszczany w podstawowym grupa plików.

  • Typy parametrów, które są zgodne z określone w za pomocą SQL Server Funkcja.

Jeśli typ zwracanych danych funkcja środowiska CLR Określa typ tabela (zwraca tabela), należy wpisać metoda w zwracanych danych <method_specifier> powinna być typu IEnumerator lub IEnumerable, a zakłada się, że interfejs jest wykonywane przez twórcę funkcji. W odróżnieniu od Transact-SQL Funkcje, funkcje środowiska CLR nie może zawierać klucz podstawowy, unikatowy lub wyboru ograniczeń <table_type_definition>. Typy danych kolumn określonych w <table_type_definition> muszą być zgodne z typami odpowiednich kolumn zestaw wyników zwróconych przez metoda w <method_specifier> na wykonanie czas. Określa, że funkcja ma co najmniej jedną z następujących opcji.

Wskazuje, że Środowisko CLR funkcje zdefiniowane przez użytkownika przekonwertuje oryginalny tekst instrukcja CREATE funkcja na format obfuscated.

Dane wyjściowe obfuscation nie jest bezpośrednio widoczne we wszystkich widoki wykazu.

Funkcje skalarne można wywoływać tam, gdzie można używać wyrażeń skalarnych.Dotyczy to kolumn obliczanych i definicji ograniczeń CHECK.Funkcje skalarne mogą być także wykonywane przy użyciu instrukcji EXECUTE.Funkcje skalarne muszą być wywoływane co najmniej przy użyciu dwuczęściowej nazwy funkcji.Aby uzyskać więcej informacji na temat nazw wieloczęściowych, zobacz Transact-SQL Syntax Conventions (Transact-SQL).Funkcje zwracające tabele można wywoływać tam, gdzie są dopuszczalne wyrażenia tabeli w klauzuli FROM lub instrukcjach SELECT, INSERT, UPDATE lub DELETE.Aby uzyskać więcej informacji, zobacz Executing User-Defined Functions (Database Engine).

Współdziałanie

SCHEMABINDING

  • Określa, że funkcja jest związany obiektów bazy danych, które odwołuje się.

  • Po określeniu SCHEMABINDING podstawowej obiekty nie mogą być modyfikowane w taki sposób, że będzie miało wpływu na definicji funkcja.

  • Najpierw samej definicji funkcja muszą być zmodyfikowane lub usunięte, aby usunąć zależności dla obiektu, który ma zostać zmodyfikowana.

  • Instrukcje SELECT zawierające listy wyboru z wyrażeniami przypisującymi wartości do zmiennych lokalnych.

  • Funkcja zostaje odrzucone.Dozwolone są tylko instrukcje pobrania, które jest przypisanie wartości do zmiennych lokalnych przy użyciu klauzula INTO; instrukcje pobrania, które dane są zwracane do klient nie są dozwolone.

  • INSERT, UPDATE i DELETE instrukcji Modyfikacja zmiennych Tabela lokalna.

  • Instrukcji wykonać wywoływania rozszerzonych procedur przechowywanych.

  • Aby uzyskać więcej informacji zobaczTworzenie funkcje zdefiniowane przez użytkownika (aparat bazy danych).

Współdziałanie kolumna obliczana

W SQL Server 2005 a później, funkcje mają następujące właściwości. Wartości te właściwości określają, czy funkcje mogą być używane w kolumny obliczane, które mogą być utrwalone lub indeksowane.

Właściwość

Description

Notatki

IsDeterministic

Funkcja jest deterministyczny lub nondeterministic.

W funkcjach deterministyczny jest dozwolony dostęp do danych lokalnych.Na przykład funkcje, które zawsze zwraca ten sam efekt, ilekroć są nazywane za pomocą określonego zestaw wartości wejściowych i z tego samego stanu bazy danych może być oznaczony jako deterministyczny.

IsPrecise

Funkcja jest dokładne lub nieprecyzyjne.

Funkcje nieprecyzyjne zawierają operacji, takich jak ruchomy operacji.

IsSystemVerified

Dokładność i determinism właściwości funkcja może być zweryfikowana przez SQL Server.

 

SystemDataAccess

Funkcja uzyskuje dostęp do danych systemowych (katalogi systemu lub tabele systemowe wirtualnego) lokalnego wystąpienie SQL Server.

 

UserDataAccess

Funkcja uzyskuje dostęp do danych użytkownika lokalnego wystąpienie SQL Server.

Zawiera tabel zdefiniowanych przez użytkownika i tabele tymczasowe, ale nie zmienne Tabela.

Właściwości dokładność i determinism Transact-SQL funkcje są automatycznie określane przez SQL Server. Aby uzyskać więcej informacji zobaczWytyczne projekt funkcja zdefiniowana przez użytkownika.Właściwości dostępu i determinism danych funkcji środowiska CLR może być określony przez użytkownika.Aby uzyskać więcej informacji zobaczOmówienie integracja CLR atrybuty niestandardowe.

Aby wyświetlić bieżące wartości tych właściwości, należy użyć OBJECTPROPERTYEX.

kolumna obliczana, która wywołuje funkcję zdefiniowaną przez użytkownika mogą służyć do indeksu, gdy funkcja zdefiniowana przez użytkownika ma następujące wartości właściwość:

  • IsDeterministic = true

  • IsSystemVerified = true (chyba że kolumna obliczana jest zachowywane)

  • UserDataAccess = false

  • SystemDataAccess = false

Aby uzyskać więcej informacji zobaczTworzenie indeksów na kolumny obliczane.

Wywołanie rozszerzonym przechowywane procedury z funkcje

rozszerzona procedura składowana, gdy zostanie wywołana z wewnątrz funkcja, nie można zwrócić zestaw wyników do klient.Wszelkie ODS API, które zwracają zestawów wyników do klient będzie zwracać się nie POWIEŚĆ.rozszerzona procedura składowana może połączyć się z powrotem do wystąpienie SQL Server; jednak nie należy go spróbować do tej samej transakcji, jak funkcja, która wywołała rozszerzona procedura składowana.

Podobnie jak wywołania z partia lub procedury przechowywanej, rozszerzona procedura składowana będzie wykonywany w kontekście zabezpieczeń konta systemu Windows, w których SQL Server jest uruchomiony. Właściciel procedura przechowywana należy wziąć pod uwagę to podczas wyświetlania uprawnienie wykonać na niej użytkowników.

Ograniczenia i ograniczenia

Funkcje zdefiniowane przez użytkownika nie może służyć do wykonywania czynności, które modyfikują stanu bazy danych.

Funkcje zdefiniowane przez użytkownika nie może zawierać klauzula INTO wyjście zawierający tabela jako jego miejsce docelowe.

Poniżej Service Broker instrukcje nie mogą zostać uwzględnione w definicji Transact-SQL funkcja zdefiniowanej przez użytkownika:

  • POCZĄTKOWY OKNACH KONWERSACJI

  • KONIEC KONWERSACJI

  • POLECENIE GET grupa konwersacji

  • PRZENOSZENIE KONWERSACJI

  • ODBIERANIE

  • ADBO

Funkcje zdefiniowane przez użytkownika mogą być zagnieżdżane, oznacza to jedną funkcja zdefiniowaną przez użytkownika mogą wywoływać innego.Poziom zagnieżdżenia jest zwiększana, gdy wywoływana funkcja rozpoczyna się wykonywanie oraz zmniejszona, gdy wywoływana funkcja zakończy się wykonywanie.Funkcje zdefiniowane przez użytkownika może być zagnieżdżony maksymalnie 32 poziomy.Przekraczającą maksymalną poziomów zagnieżdżenia powoduje, że cała wywołanie funkcja łańcucha nie powiedzie się.Każde odwołanie do kod zarządzany z Transact-SQL funkcja zdefiniowanej przez użytkownika jest liczone jako jeden poziom w ograniczeniu 32 poziomu zagnieżdżenia. Metody wywoływane z kodem zarządzanym nie są uwzględniane przez ten limit.

Za pomocą kolejność sortowania w CLR funkcje wycenione tabela

W przypadku korzystania z klauzula ORDER w CLR wycenione tabela funkcji, należy postępować zgodnie z poniższymi wskazówkami:

  • Należy się upewnić, że wyniki są zawsze uporządkowane w określonej kolejności.Jeśli wyniki nie są w kolejności określonej SQL Server generuje komunikat o błędzie po wykonaniu kwerendy.

  • Jeżeli określono klauzulę ORDER, dane wyjściowe funkcja zwracająca tabelę musi być sortowane zgodnie z sortowanie kolumna (bezpośrednie lub pośrednie).Na przykład sortowanie kolumna w przypadku języka chińskiego (albo określone w DDL dla funkcja wycenione tabela lub z sortowanie bazy danych), zwracane wyniki musi być sortowane zgodnie z chiński sortowanie reguł.

  • Z klauzula ORDER, jeśli określony, jest zawsze zweryfikowana przez SQL Server podczas zwracania wyniki, niezależnie od tego, czy to jest używana przez procesor kwerend do wykonania dalszej optymalizacji. Klauzula ORDER należy używać tylko wtedy, gdy wiadomo, warto procesor kwerend.

  • The SQL Server query processor takes advantage of the ORDER klauzula automatically in following cases:

    • Wstaw kwerendy, w którym klauzula ORDER jest zgodny z indeksu.

    • ORDER BY klauzule zgodne z klauzula ORDER.

    • Agregaty, gdzie GROUP BY jest zgodny z klauzula ORDER.

    • W przypadku gdy różne kolumny są zgodne z klauzula ORDER zagregowanych DISTINCT.

Klauzula ORDER nie gwarantuje zamówione wyniki podczas wykonywania kwerendy WYBIERAJĄCEJ nie ORDER BY również zostanie podana w kwerendzie.Zobacz sys.function_order_columns (Transact-SQL) Aby uzyskać informacje o tym, jak kwerendy dla kolumn znajdujących się w porządku sortowania dla funkcji wycenione tabela.

Metadane

Poniższa tabela zawiera listę widoków katalog systemu, które można użyć do zwracania metadane dotyczące funkcji zdefiniowanych przez użytkownika.

Widok systemu

Description

sys.sql_modules

Służy do wyświetlania definicji Transact-SQL Funkcje zdefiniowane przez użytkownika. Na przykład:

Definicja funkcji, utworzony za pomocą opcji szyfrowanie nie można przeglądać za pomocą sys.sql_modules; jednak inne informacje na temat funkcji szyfrowanie jest wyświetlana.

sys.assembly_modules

Wyświetla informacje na temat funkcji zdefiniowanej przez użytkownika środowiska CLR.

sys.Parameters

Wyświetla informacje na temat parametrów zdefiniowanych w funkcji zdefiniowanych przez użytkownika.

sys.sql_expression_dependencies

Wyświetla obiektów zawiera odwołanie do funkcja.

Uprawnienia

Wymaga CREATE FUNCTION w bazie danych i ALTER uprawnienie dla schematu, w której funkcja jest tworzony.Jeśli funkcja określa typ zdefiniowany przez użytkownika, wymaga uprawnienie wykonać typu.

Przykłady

A.Za pomocą wartości wartość skalarna zdefiniowanej przez użytkownika funkcja służącą do obliczania tygodnia ISO

Poniższy przykład tworzy funkcja zdefiniowaną przez użytkownika ISOweek. Ta funkcja pobiera argumentu data i oblicza ISO numer tygodnia.Dla tej funkcja do obliczania poprawnie, SET DATEFIRST 1 musi być wywoływana przed wywołania funkcja.

W przykładzie pokazano również za pomocą WYKONANIE JAKO klauzula określić kontekst zabezpieczeń, w którym można wykonać procedura przechowywana.W przykładzie, opcja CALLER Określa, że procedura będzie wykonywany w kontekście użytkownika, który je wywołuje. Inne opcje, które mogą być określone są SAMOSPRZĘŻENIA, właściciel, a user_name.

W tym polu jest wywołanie funkcja.Zwróć uwagę, że DATEFIRST jest ustawiona na 1.

Here is the result set.

Tydzień ISO

----------------

52

B.Tworzenie wbudowanego funkcja zwracająca tabelę

W poniższym przykładzie są zwracane wbudowanego funkcja zwracająca tabelę.Zwraca ona trzy kolumny ProductID, Name a sumą sumy od początku roku w magazynie jako YTD Total dla każdego produktu sprzedane w magazynie.

Aby wywołać tę funkcja, należy uruchomić tę kwerendę.

C.Tworzenie multi-instrukcja funkcja zwracająca tabelę

Poniższy przykład tworzy funkcja zwracająca tabelę fn_FindReports(InEmpID). W przypadku z IDENTYFIKATOREM pracownika prawidłowy, funkcja zwraca tabela, która odpowiada wszystkim pracownikom tego raportu do pracownika, bezpośrednio lub pośrednio.Aby utworzyć hierarchiczną listę pracowników w funkcja używany cyklicznej typowe wyrażenie tabela (CTE).Aby uzyskać więcej informacji na temat CTEs cyklicznych zobacz WITH common_table_expression (Transact-SQL).

D.Tworzenie funkcja środowiska CLR

W poniższym przykładzie założono, że Przykłady aparat bazy danych serwera SQL są instalowane w domyślnej lokalizacji na komputerze lokalnym, a aplikacja przykładowa StringManipulate.csproj jest skompilowany.Aby uzyskać więcej informacji zobaczSupplementary-Aware String Manipulation.

W przykładzie Tworzenie funkcja środowiska CLR len_s. Przed utworzeniem funkcja, wirtualny plik dziennika SurrogateStringFunction.dll jest zarejestrowany w lokalnej bazie danych.

DECLARE @SamplesPath nvarchar(1024);
-- You may have to modify the value of this variable if you have
-- installed the sample in a location other than the default location.
SELECT @SamplesPath = REPLACE(physical_name, 'Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf', 'Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\') 
    FROM master.sys.database_files 
    WHERE name = 'master';

CREATE ASSEMBLY [SurrogateStringFunction]
FROM @SamplesPath + 'StringManipulate\CS\StringManipulate\bin\debug\SurrogateStringFunction.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO

CREATE FUNCTION [dbo].[len_s] (@str nvarchar(4000))
RETURNS bigint
AS EXTERNAL NAME [SurrogateStringFunction].[Microsoft.Samples.SqlServer.SurrogateStringFunction].[LenS];
GO

Przykład sposobu tworzenia środowiska CLR wycenione tabela funkcja można znaleźć w temacie Tabela Valued funkcje środowiska CLR.

Historia zmian

Microsoft Learning

Dodano informacje najważniejsze wskazówki dotyczące metod, które mogą być używane w celu zapewnienia, że funkcja nie staje się nieaktualna z powodu zmienia jej obiektów.