Tworzenie typu języka Transact-SQL)
Tworzy typ danych alias lub typ zdefiniowany przez użytkownika w bieżącej bazie danych.Implementacja typu danych alias jest oparta na SQL Server typu macierzystego systemu.typ zdefiniowany przez użytkownika jest wdrażane za pośrednictwem klasy wirtualny plik dziennika w Microsoft .NET Framework plików wykonywalnych języka wspólnego (CLR).Aby powiązać typ zdefiniowany przez użytkownika do jego wykonania, CLR wirtualny plik dziennika , który zawiera implementacji typu musi najpierw zostać zarejestrowana w SQL Server za pomocą Tworzenie zestawu.
Ostrzeżenie
Możliwość uruchomienia kodu CLR jest wyłączona domyślnie w SQL Server.Można tworzyć, modyfikować i upuszczać obiekty bazy danych, które odwołują się do modułów kod zarządzany , ale te odwołania zostaną nie wykonać w SQL Server chyba że clr włączona opcja jest włączone za pomocą sp_configure.
Składnia
CREATE TYPE [ schema_name. ] type_name
{
FROM base_type
[ ( precision [ , scale ] ) ]
[ NULL | NOT NULL ]
| EXTERNAL NAME assembly_name [ .class_name ]
| AS TABLE ( { <column_definition> | <computed_column_definition> }
[ <table_constraint> ] [ ,...n ] )
} [ ; ]
<column_definition> ::=
column_name <data_type>
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
[
DEFAULT constant_expression ]
| [ IDENTITY [ ( seed ,increment ) ]
]
[ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ]
<data type> ::=
[ type_schema_name . ] type_name
[ ( precision [ , scale ] | max |
[ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]
<column_constraint> ::=
{ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[
WITH ( <index_option> [ ,...n ] )
]
| CHECK ( logical_expression )
}
<computed_column_definition> ::=
column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[
WITH ( <index_option> [ ,...n ] )
]
| CHECK ( logical_expression )
]
<table_constraint> ::=
{
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
( column [ ASC | DESC ] [ ,...n ] )
[
WITH ( <index_option> [ ,...n ] )
]
| CHECK ( logical_expression )
}
<index_option> ::=
{
IGNORE_DUP_KEY = { ON | OFF }
}
Argumenty
schema_name
Jest to nazwa schematu, do której należy typ danych alias lub typ zdefiniowany przez użytkownika .type_name
Jest nazwą typu danych alias lub typ zdefiniowany przez użytkownika.Wpisz nazwy muszą być zgodne z zasadami identyfikatorów.base_type
Jest SQL Server podany typ danych opiera typ danych alias . base_type jest sysname, z Brak domyślnej i może mieć jedną z następujących wartości:bigint
binary(n)
bit
char(n)
date
datetime
datetime2
datetimeoffset
decimal
float
image
int
money
nchar(n)
ntext
numeric
nvarchar(n| max)
real
smalldatetime
smallint
smallmoney
sql_variant
text
time
tinyint
uniqueidentifier
varbinary(n| max)
varchar(n| max)
base_type może być również wszelkie synonim typu danych, który jest mapowany do jednego z tych typów danych.
precision
Dla decimal lub numeric, to nieujemna liczba całkowita wskazująca maksymalną całkowitą liczbę cyfr dziesiętnych, które mogą być przechowywane, po lewej i po prawej stronie przecinka dziesiętnego.Aby uzyskać więcej informacji, zobacz decimal i numeric (Transact-SQL).scale
Dla decimal lub numeric, jest nieujemną liczbą całkowitą, która wskazuje maksymalną liczbę cyfr dziesiętnych, które mogą być przechowywane po prawej stronie przecinka dziesiętnego, i musi być mniejsza lub równa precyzji.Aby uzyskać więcej informacji, zobacz decimal i numeric (Transact-SQL).NULL | NIEDOZWOLONE WARTOŚCI NULL
Określa, czy typ może zawierać wartość null .Jeśli nie jest określony, wartość NULL jest wartością domyślną.assembly_name
Określa SQL Server wirtualny plik dziennika odwołujący się do wprowadzenia w życie typ zdefiniowany przez użytkownika wspólne środowiska wykonawczego języka. assembly_name powinna być zgodna z istniejącego wirtualny plik dziennika w SQL Server w bieżącej bazie danych.[.class_name ]
Określa klasę w obrębie wirtualny plik dziennika implementuje typ zdefiniowany przez użytkownika.class_namemusi być prawidłowym identyfikatorem i musi istnieć jako klasa w wirtualny plik dziennika z wirtualny plik dziennika widoczności.class_namema przypadek-poufne, niezależnie od sortowaniebazy danych i musi nazwisko Dopasuj dokładnie klasy odpowiedniego wirtualny plik dziennika.Nazwa klasy może zawierać nazwy kwalifikowanej nazw w nawiasach kwadratowych ([]) Jeśli język programowania, który jest używany do zapisywania klasy jest koncepcja przestrzeni nazw, takich jak C#.Jeśli class_name nie jest określony, SQL Server zakłada się, że jest taka sama jak type_name.<column_definition>
Definiuje kolumny Typ zdefiniowany przez użytkownika tabela .Aby uzyskać więcej informacji na temat kolumn, zobacz Dodawanie i usuwanie kolumn.<typ danych>
Definiuje typ danych w kolumna typ zdefiniowany przez użytkownika tabela .Aby uzyskać więcej informacji dotyczących typów danych, zobacz temat Typy danych (Transact-SQL).Aby uzyskać więcej informacji o tabelach, zobacz CREATE TABLE (Transact-SQL).<column_constraint>
Definiuje ograniczenia kolumna typ zdefiniowany przez użytkownika tabela .Obsługiwane ograniczenia obejmują klucza podstawowego, unikatowych i wyboru.Aby uzyskać więcej informacji o ograniczeniach, zobacz Wymuszanie integralności danych.Aby uzyskać więcej informacji o tabelach, zobacz CREATE TABLE (Transact-SQL).<computed_column_definition>
Definiuje kolumnaobliczanejwyrażenie w kolumna typ zdefiniowany przez użytkownika tabela . Aby uzyskać więcej informacji na temat kolumny obliczane, zobacz Kolumny obliczane.Aby uzyskać więcej informacji o tabelach, zobacz CREATE TABLE (Transact-SQL).<table_constraint>
Definiuje ograniczenie tabela typ zdefiniowany przez użytkownika tabela .Obsługiwane ograniczenia obejmują klucza podstawowego, unikatowych i wyboru.Aby uzyskać więcej informacji dotyczących ograniczeń tabela , zobacz Ograniczenia.<index_option>
Określa odpowiedzi błąd zduplikowane wartości klucz w wierszu wielu operacji na unikatowego klastrowanego lub unikatowego indeks nieklastrowanywstawiania.Aby uzyskać więcej informacji o opcjach indeksu, zobacz CREATE INDEX (Transact-SQL).
Uwagi
Tworzenie typu użyto do utworzenia zdefiniowany przez użytkownika typ CLRzgodności bazy danych musi być 90.
Klasa wirtualny plik dziennika odwołujące się do assembly_name, wraz z jego metod powinna spełniać wszystkie wymagania wykonania typ zdefiniowany przez użytkownika w SQL Server.Aby uzyskać więcej informacji na temat tych wymagań, zobacz CLR typów zdefiniowanych przez użytkownika.
Następujące uwagi dodatkowe:
Klasę można obciążać metod, ale tych metod może być wywołana tylko z kod zarządzanynie z Transact-SQL.
Wszelkie elementy statyczne musi być zadeklarowany jako const lub readonly Jeśli assembly_name jest bezpieczny lub EXTERNAL_ACCESS.
W bazie danych, może być tylko jeden typ zdefiniowany przez użytkownika rejestrowane dla określonego typu, który został przekazany w SQL Server z CLR.Jeśli typ zdefiniowany przez użytkownika jest tworzony na typ CLR, dla których typ zdefiniowany przez użytkownika już istnieje w bazie danych, utworzyć typ nie powiedzie się z powodu błędu.Ograniczenie to jest wymagane Aby uniknąć niejednoznaczności rozpoznanie typu SQL , jeśli typ CLR mogą być mapowane do więcej niż jeden typ zdefiniowany przez użytkownika.
Jeśli nie zwraca żadnych mutator metoda w typie void, utworzyć typ instrukcja nie, nie wykonać.
Aby zmodyfikować typ zdefiniowany przez użytkownika, należy upuścić typu przy użyciu instrukcja DROP TYPE i utworzyć go ponownie.
W odróżnieniu od typów zdefiniowanych przez użytkownika, które są tworzone za pomocą sp_addtype, public rola bazy danych nie ma automatycznie uprawnień odwołania na typy, które są tworzone za pomocą tworzenia typu.To uprawnienie musi mieć przyznane oddzielnie.
W przypadku typów zdefiniowanych przez użytkownika tabela strukturę typy zdefiniowane przez użytkownika, które są używane w column_name <Typ danych> są częścią schemat bazy danych zakres , w którym zdefiniowano typu tabela .Uzyskać dostęp do strukturalnych typy zdefiniowane przez użytkownika w innym zakres w bazie danych, należy użyć nazwy dwóch części.
W przypadku typów zdefiniowanych przez użytkownika tabela klucz podstawowego na kolumny obliczane musi być UTRWALONE i NOT NULL.
Uprawnienia
Wymaga utworzenia typu uprawnienia w bieżącej bazie danych i ZMIEŃ na schema_name.Jeśli schema_name nie jest określony, zastosowanie zasady domyślne nazwy rozdzielczości dla określenia schematu dla bieżącego użytkownika.Jeśli assembly_name jest określony, użytkownik musi własny wirtualny plik dziennika lub mieć uprawnienie odwołania na typie.
Przykłady
A.Tworzenie typu alias , na podstawie typu danych varchar
Poniższy przykład tworzy typ alias , oparte na dostarczone systemu varchar typu danych.
CREATE TYPE SSN
FROM varchar(11) NOT NULL ;
B.Tworzenie typ zdefiniowany przez użytkownika
Poniższy przykład tworzy typ Utf8String odwołujący się do klasy utf8string w wirtualny plik dziennika utf8string.Przed utworzeniem typu wirtualny plik dziennika utf8string jest zarejestrowany w lokalnej bazie danych.
CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO
C.Tworzenie typ zdefiniowany przez użytkownika tabela
Poniższy przykład tworzy typ zdefiniowany przez użytkownika tabela , który zawiera dwie kolumny.Aby uzyskać więcej informacji dotyczących sposobu tworzenia i używania tabela-wyceniane parametrów, zobacz Parametry oródwierszową (aparat bazy danych).
/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE
( LocationName VARCHAR(50)
, CostRate INT )
GO