Zmienianie funkcji (Transact-SQL)
Modyfikuje istniejący Transact-SQL lub funkcja CLR , który został wcześniej utworzony przez wykonywanie funkcji tworzenia instrukcja, bez zmieniania uprawnień i bez wpływu na wszystkie funkcje zależne od przechowywanych procedur lub wyzwalaczy.
Składnia
Scalar Functions
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS return_data_type
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END
[ ; ]
Inline Table-valued Functions
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
Multistatement Table-valued Functions
ALTER FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
]
)
RETURNS @return_variable TABLE <table_type_definition>
[ WITH <function_option> [ ,...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
[ ; ]
CLR Functions
ALTER FUNCTION [ schema_name. ] function_name
( { @parameter_name [AS] [ type_schema_name. ] parameter_data_type
[ = default ] }
[ ,...n ]
)
RETURNS { return_data_type | TABLE <clr_table_type_definition> }
[ WITH <clr_function_option> [ ,...n ] ]
[ AS ] EXTERNAL NAME <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
Jest to nazwa schematu, do której należy dany funkcja zdefiniowanej przez użytkownika.function_name
Jest zdefiniowana przez użytkownika funkcja ma zostać zmieniony.Ostrzeżenie
Nawiasy są wymagane po nazwę funkcja , nawet, jeżeli nie określono parametru.
**@**parameter_name
Jest parametrem funkcjazdefiniowanej przez użytkownika.Jeden lub więcej parametrów może być zadeklarowana.funkcja może mieć maksymalnie 2,100 parametrów.Wartość każdego parametru deklarowanych musi być podany przez użytkownika funkcja jest wykonywana, chyba że określono domyślny parametr.
Określ nazwę parametru za pomocą znaku (@) jako pierwszego znaku.Nazwa parametru musi być zgodne z zasadami identyfikatorów.Parametry są lokalne funkcja; tej samej nazwy parametrów mogą być używane w innych funkcji.Parametry mogą mieć miejsce tylko o stałych; nie można używać zamiast nazwy tabela , nazwy kolumna lub nazw innych obiektów bazy danych.
Ostrzeżenie
Nie jest honorowane ANSI_WARNINGS, przekazując parametry procedura składowana, zdefiniowanej przez użytkownika funkcjalub deklarowania i ustawiania zmiennych winstrukcja partia. Na przykład, jeśli zmienna jest zdefiniowana jako char(3), a następnie zestaw na wartość większą niż trzy znaki, dane są obcięte zdefiniowany rozmiar i WSTAW lub instrukcja UPDATE zakończy się pomyślnie.
[ type_schema_name. ] parameter_data_type
Jest typ danych parametru i opcjonalnie schematu, do której należy.Dla Transact-SQL Funkcje, wszystkie typy danych, w tym CLR typy zdefiniowane przez użytkownika są dozwolone z wyjątkiem timestamp typu danych.Funkcje środowiska CLR dozwolone są wszystkie typy danych, w tym typy zdefiniowane przez użytkownika CLR z wyjątkiem text, ntext, image, i timestamp typów danych.Typy nonscalar cursor i table nie może być określony jako typ danych parametru w obu Transact-SQL lub funkcji środowiska CLR.Jeśli type_schema_name nie jest określony, Aparat baz danych programu SQL Server 2005 szuka parameter_data_type w następującej kolejności:
Schemat, która zawiera nazwy typów danych SQL Server.
Domyślny schemat bieżącego użytkownika w bieżącej bazie danych.
Dbo schematu w bieżącej bazie danych.
[ **=**default ]
Jest wartością domyślną parametru.Jeśli default określonych wartości, funkcja mogą być wykonywane bez określenia wartości dla tego parametru.Ostrzeżenie
Wartości domyślne parametrów można określić dla funkcji CLR z wyjątkiem varchar(max) i varbinary(max) typów danych.
Kiedy parametr funkcja ma wartość domyślną, słowo kluczowe domyślna musi być określona podczas wywoływania funkcja , aby pobrać wartość domyślną.To zachowanie różni się od parametrów przy użyciu wartości domyślnych w procedurach przechowywanych, w których pominięcie parametru oznacza również wartość domyślną.
return_data_type
Jest zwracanej wartości wartość skalarna zdefiniowanej przez użytkownika funkcja.Dla Transact-SQL Funkcje, wszystkie typy danych, w tym CLR typy zdefiniowane przez użytkownika są dozwolone z wyjątkiem timestamp typu danych.Funkcje środowiska CLR dozwolone są wszystkie typy danych, w tym typy zdefiniowane przez użytkownika CLR z wyjątkiem text, ntext, image, i timestamp typów danych.Typy nonscalar cursor i table nie może być określony jako typ zwracanych danych w obu Transact-SQL lub funkcji środowiska CLR.function_body
Określa, że szereg Transact-SQL instrukcji, które razem nie wytwarzają efektem ubocznym, takie jak modyfikowanie tabela, zdefiniuj wartość funkcja.function_bodyużywane tylko w funkcji wartość skalarna oraz wieloma instrukcjami tabela-wycenione funkcji.W funkcji wartość skalarna function_body to seria Transact-SQL instrukcji, które razem ocenić wartość wartość skalarna .
W tabelazostanie-wycenione funkcje, function_body to seria Transact-SQL instrukcji, które wypełnić tabelę zwracają zmiennej.
scalar_expression
Określa, żefunkcja wartość skalarnazwraca wartooć wartość skalarna .TABELA
Określa, że wartość zwracana tabela-ważnych funkcja jest tabela.Tylko stałe i **@**local_variables mogą być przekazywane do tabela-wycenione funkcji.W wierszu tabela-ważnych funkcji, wartość zwracana w tabeli jest definiowana poprzez pojedynczą instrukcjaSELECT.Wbudowane funkcje skojarzone zmiennych zwrotu nie jest konieczne.
W tabelazostanie-wycenione funkcje, **@return_variable jest zmienna tabeli używane do przechowywania i gromadzą się wierszy, które powinny być zwracane jako wartość funkcja.@**return_variable można określić tylko dla Transact-SQL Funkcje, a nie dla funkcji środowiska CLR.
select-stmt
SELECT pojedynczej instrukcja , która definiuje wartość zwracana w wierszu tabelajest-wycenione funkcja.Nazwa zewnętrznego <method_specifier>assembly_name.class_name.method_name
Określa metoda wirtualny plik dziennika powiązać z funkcja.assembly_namemusi być zgodna z istniejącego wirtualny plik dziennika w SQL Server w bieżącej bazie danych z widoczności na.class_namemusi być prawidłową SQL Server identyfikatora i musi istnieć jako klasa w wirtualny plik dziennika.Jeśli klasa ma kwalifikowanej nazw nazwa używana jest kropka (.) do oddzielania części obszaru nazw, nazwa klasy musi rozdzielany za pomocą nawiasów kwadratowych ( ) lub cudzysłów (" ").method_namemusi być prawidłową SQL Server identyfikatora i musi istnieć jako statyczna metoda w określona klasaOstrzeżenie
Domyślnie SQL Server nie może wykonać CLR kodu.Tworzenie, modyfikowanie i usuwanie obiektów bazy danych, które odwołują się do wspólnych moduły obsługi języka; Jednakże, nie możesz wykonać te odwołania w SQL Server do chwili włączenia clr włączona opcja.Aby włączyć opcję, użyj sp_configure.
<table_type_definition> ( { <column_definition> <column_constraint> | <computed_column_definition>} <table_constraint>] ,...n ])
Definiuje typ danych tabela Transact-SQL funkcja.tabeladeklaracja zawiera definicje kolumna i ograniczeń kolumna lub tabela .<clr_table_type_definition > ( { column_namedata_type } [ ,...n ] )
Określa typy danych tabela funkcja CLR.tabeladeklaracja zawiera tylko nazwy kolumna i typów danych.
<function_option>:: = i <clr_function_option>:: =
Określa, że funkcja będzie mieć co najmniej jedną z następujących opcji.
SZYFROWANIE
Wskazuje, że Aparat baz danych kolumny widoku wykazu, które zawiera tekst ZMIENIA funkcja instrukcjaszyfruje.Szyfrowanie uniemożliwia publikowana jako część funkcja SQL Server replikacja.Nie można określić szyfrowania dla funkcji środowiska CLR.SCHEMABINDING
Określa, że funkcja jest związany ze obiektów bazy danych, do których się odwołuje.Warunek ten uniemożliwi zmiany funkcja jeżeli ona odwołuje się do innych obiektów schematu powiązane.powiązanie funkcja do obiektów, do których się on odwołuje usuwane są tylko wtedy, gdy wystąpi jedno z następujących czynności:
funkcja jest odrzucany.
funkcja jest modyfikowana przy użyciu instrukcja ALTER nie określono opcję SCHEMABINDING.
Aby listę warunków, które muszą być spełnione, zanim funkcja może być związany schematu, zobacz CREATE FUNCTION (Transact-SQL).
ZWRACA WARTOŚĆ NULL NA NULL WPROWADZANIA | WYWOŁANA DLA WPROWADZANIA WARTOŚCI NULL
Określa OnNULLCall atrybut wartość skalarna— wartości funkcja.Jeśli nie określono o NAZWIE wprowadzania wartości NULL na jest implikowane domyślnie.Oznacza to, że w treści funkcja wykonywane nawet wtedy, gdy wartość NULL jest przekazywana jako argument.Jeśli w funkcja CLRzwraca wartość NULL na NULL wprowadzania jest określony, to wskazuje, że SQL Server może zwracać wartość NULL, gdy którykolwiek z argumentów odbiera ma wartość NULL, bez faktycznie powołania organu funkcja.Jeśli metoda określona w <method_specifier> już niestandardowy atrybut , który wskazuje zwraca wartość NULL na NULL wprowadzania, ale funkcja zmiany instrukcja wskazuje o NAZWIE wprowadzania wartości NULL na, funkcja zmiany instrukcja ma pierwszeństwo przed.OnNULLCalldla środowiska CLR tabelanie można określićatrybut -wycenione funkcji.
WYKONANIE klauzuli
Określa kontekst zabezpieczeń, na którym wykonywany jest zdefiniowana przez użytkownika funkcja .W związku z tym, można kontrolować, które konto użytkownika SQL Server obiektów zawiera odwołanie do funkcjabazy danych używa do sprawdzania poprawności uprawnień na żadnym.Ostrzeżenie
Nie można określić jako EXECUTE wbudowanej funkcji zdefiniowanej przez użytkownika.
Aby uzyskać więcej informacji, zobacz WYKONANIE klauzuli (Transact-SQL).
<column_definition >:: =
Definiuje typ danych tabela .tabeladeklaracja zawiera definicje kolumna i ograniczeń. Funkcje środowiska CLR tylko column_name i data_type można określić.
column_name
Jest to nazwa kolumna w tabela.Nazwy kolumn muszą być zgodne z zasadami dotyczącymi identyfikatorów i muszą być unikatowe w tabela.column_namemoże zawierać od 1 do 128 znaków.data_type
Określa typ danych kolumna .Dla Transact-SQL Funkcje, wszystkie typy danych, w tym CLR typy zdefiniowane przez użytkownika są dozwolone z wyjątkiem timestamp.Funkcje środowiska CLR dozwolone są wszystkie typy danych, w tym typy zdefiniowane przez użytkownika CLR z wyjątkiem text, ntext, image, char, varchar, varchar(max), i timestamp.Typ nonscalar cursor nie może być określony jako typ danych kolumna w obu Transact-SQL lub funkcji środowiska CLR.DOMYŚLNEconstant_expression
Określa wartość podana dla kolumna , gdy wartość nie jest jawnie podany podczas wstawiania.constant_expressionjest stała, NULL lub wartości funkcja systemu.Definicje domyślne mogą być stosowane do dowolnej kolumna z wyjątkiem tych, których tożsamość właściwość.Nie można określić DOMYŚLNĄ dla CLR tabela-wycenione funkcji.SORTOWANIEcollation_name
Określa sortowanie dla kolumna.Jeśli nie określono kolumna przypisano domyślne sortowanie bazy danych.Nazwa sortowania może być nazwa sortowanie systemu Windows lub nazwasortowanie SQL. Listy i uzyskać więcej informacji, zobacz Nazwa sortowania systemu Windows (Transact-SQL) i Nazwa sortowania SQL Server (Transact-SQL).klauzula COLLATE może służyć do zmiany ustawień sortowania tylko z kolumn char, varchar, nchar, i nvarchar typów danych.
SORTUJ nie można określić dla środowiska CLR tabela-wycenione funkcji.
ROWGUIDCOL
Wskazuje, że nowa kolumna jest globalnym identyfikator unikatowy wiersz kolumna.Tylko jeden uniqueidentifierkolumna w tabela może być wyznaczony jako ROWGUIDCOL kolumna.ROWGUIDCOL właściwość można przypisać tylko do uniqueidentifier kolumna.właściwość ROWGUIDCOL nie wymusza unikatowość wartości przechowywane w kolumna.On również nie generuje automatycznie wartości nowe wiersze wstawione do tabela.Aby generować unikatowe wartości dla każdej kolumna, należy użyć NEWID funkcja w instrukcji INSERT.Można określić wartość domyślna; jednak NEWID nie można określić jako domyślny.
TOŻSAMOŚĆ
Wskazuje, że nowa kolumna jest kolumnatożsamooci.Podczas dodawania nowego wiersza do tabela SQL Server zawiera unikatowy, przyrostowych wartości dla kolumna.Kolumny tożsamości są zwykle używane wraz z ograniczeń klucza podstawowego służyć jako identyfikator unikatowy wiersz tabela.Identyfikacja właściwość można przypisać do tinyint, smallint, int, bigint, decimal(p,0), lub numeric(p,0) kolumny.tabelamożna utworzyć tylko jedną kolumna .Domyślne powiązania i ograniczeń DOMYŚLNEJ nie można używać z kolumna.Należy określić obie seed i increment lub żadna.Jeśli zostanie podana żadna wartość domyślna to (1,1).Nie można określić tożsamości dla środowiska CLR tabela-wycenione funkcji.
seed
Jest wartością całkowitą ma być przypisany do pierwszego wiersza w tabela.increment
Jest wartością całkowitą, aby dodać do seed wartość dla kolejnych wierszy w tabela.
<column_constraint >:: = i < table_constraint>:: =
Określa ograniczenie dla określonej kolumna lub tabela.Funkcje środowiska CLR typu ograniczenie tylko dozwolone jest NULL.Nazwany ograniczenia nie są dozwolone.
NULL | NIEDOZWOLONE WARTOŚCI NULL
Określa, czy w kolumnadozwolone są wartości null .Wartość NULL nie jest ściśle ograniczenie, ale można określić tak samo jak NOT NULL.NIE dla CLR tabelanie można określić wartość NULL-wycenione funkcji.KLUCZ PODSTAWOWY
To ograniczenie wymusza obiekt integralność dla określonej kolumna za pomocą indeks unikatowy.W tabela-ważnych funkcji zdefiniowanej przez użytkownika ograniczenie klucza podstawowego można utworzyć tylko jedną kolumna tabela.Nie można określić klucz podstawowy dla środowiska CLR tabela-wycenione funkcji.UNIKATOWE
To ograniczenie, które zapewnia obiekt integralność dla określonej kolumna lub kolumn do indeks unikatowy.tabela może mieć wiele ograniczeń UNIQUE.Nie można określić unikatowe dla środowiska CLR tabela-wycenione funkcji.KLASTROWANE | NIEKLASTROWANY
Wskazać klastrowany lub indeks nieklastrowany jest tworzony dla ograniczenia na klucz podstawowy lub unikatowe.Ograniczenia na klucz podstawowy używać CLUSTERED, a ograniczenie typu UNIQUE NONCLUSTERED.Tylko jedno ograniczenie może wybrać CLUSTERED.Jeśli CLUSTERED określono dla ograniczenia UNIQUE i określony jest również ograniczenie na klucz podstawowy, klucz podstawowy używa NONCLUSTERED.
Nie można określić CLUSTERED i NONCLUSTERED dla środowiska CLR tabela-wycenione funkcji.
WYBORU
To ograniczenie wymusza domena integralność poprzez ograniczenie możliwych wartości, które mogą być wprowadzane do kolumna lub kolumn.Sprawdź, czy dla środowiska CLR tabelanie można określić ograniczenia-wycenione funkcji.- logical_expression
Jest logiczną wyrażenie , które zwraca wartość PRAWDA lub FAŁSZ.
- logical_expression
<computed_column_definition>:: =
Określa kolumnaobliczanej.Aby uzyskać więcej informacji na temat kolumny obliczane, zobacz CREATE TABLE (Transact-SQL).
column_name
Jest to nazwa kolumnaobliczanej.computed_column_expression
To wyrażenie , które definiuje wartość kolumnaobliczanej.
<index_option> :: =
Określa opcje indeks klucza podstawowego lub unikatowy indeks.Aby uzyskać więcej informacji o opcjach indeksu, zobacz CREATE INDEX (Transact-SQL).
PAD_INDEX = {ON | OFF}
Określa indeks uzupełnienie.Domyślnie jest wyłączona.FILLFACTOR =fillfactor
Określa wartość procentową, która wskazuje, jak pełne Aparat baz danych należy ustawić liść poziom każdej strona indeksu podczas tworzenia indeksu lub Zmień.fillfactormusi mieć wartość całkowitą od 1 do 100.Wartość domyślna to 0.IGNORE_DUP_KEY = {ON | OFF}
Określa odpowiedź błąd podczas operacji wstawiania spróbuje wstawić wartości zduplikowany klucz do indeks unikatowy.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub przebudowanych.Domyślnie jest wyłączona.STATISTICS_NORECOMPUTE = {ON | OFF}
Określa, czy są przeliczane statystyk dystrybucji.Domyślnie jest wyłączona.ALLOW_ROW_LOCKS = {ON | OFF}
Określa, czy wiersz blokady są dozwolone.Domyślnie jest włączone.ALLOW_PAGE_LOCKS = {ON | OFF}
Określa, czy dozwolone są strona blokad.Domyślnie jest włączone.
Uwagi
ZMIANY funkcji nie można zmienić wartość skalarna-wycenione funkcja tabela-wycenione funkcjalub odwrotnie.Ponadto zmiany funkcji nie można zmienić z wieloma instrukcjami funkcjaśródwierszowej funkcja lub odwrotnie.Zmienianie funkcji nie można zmienić Transact-SQL funkcja funkcja CLR lub odwrotnie.
Poniższe instrukcje Service Broker nie zawarte w definicji Transact-SQL przez użytkownika funkcja:
ROZPOCZNIJ KONWERSACJĘ OKNO DIALOGOWE
KONIEC KONWERSACJI
POBIERZ KONWERSACJĘ GRUPY
PRZENIEŚĆ KONWERSACJI
ODBIERANIE
WYŚLIJ
Uprawnienia
Wymaga uprawnienia do zmiany funkcja lub schematu.Jeśli funkcja Określa typ zdefiniowany przez użytkownika, wymaga uprawnienie EXECUTE typu.
Zobacz także