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.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

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