Udostępnij za pośrednictwem


CREATE TYPE (Transact-SQL)

Tworzy typem danych alias lub typ zdefiniowany przez użytkownika w bieżącej bazie danych.Implementacja typu danych alias jest oparta na SQL Server Typ macierzysty system. A user-defined type is implemented through a class of an assembly in the Microsoft .NET Framework common language runtime (CLR).Aby powiązać typ zdefiniowany przez użytkownika do jej wykonania, wirtualny plik dziennika CLR, zawierający implementacji typu najpierw musi być zarejestrowany w SQL Server za pomocą TWORZENIE wirtualny plik dziennika.

Uwaga

Zdolność do uruchamiania środowiska CLR kodu jest wyłączone 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 nie będą wykonać w SQL Server chyba że CLR włączona opcja za pomocą jest włączonasp_configure.

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

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
    To nazwa schematu, do której należy dany typ danych alias lub typ zdefiniowany przez użytkownika.

  • type_name
    To nazwa typu danych alias lub typ zdefiniowany przez użytkownika.Nazwy typów muszą być zgodne z zasadami identyfikatory.

  • base_type
    Is the SQL Server supplied data type on which the alias data type is based.base_type is sysname, with no default, and can be one of the following values:

    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żna także synonim z typu danych, który jest mapowany do jednego z tych typów danych systemu.

  • 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 prawej stronie przecinka dziesiętnego. Aby uzyskać więcej informacji zobaczdecimal and 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 na prawo od separatora dziesiętnego i musi być mniejsza niż lub równa dokładność. Aby uzyskać więcej informacji zobaczdecimal and numeric (Transact-SQL).

  • WARTOŚCI NULL | NOT NULL
    Określa, czy typ może zawierać wartości null.Jeśli tak nie jest określony, NULL jest wartością domyślną.

  • assembly_name
    Specifies the SQL Server assembly that references the implementation of the user-defined type in the common language runtime.assembly_name should match an existing assembly in SQL Server in the current database.

  • [.class_name ]
    Specifies the class within the assembly that implements the user-defined type.class_name must be a valid identifier and must exist as a class in the assembly with assembly visibility.class_name is case-sensitive, regardless of the database collation, and must exactly match the class name in the corresponding assembly.Nazwa klasy mogą być ujęte w nawiasy kwadratowe (nazwy kwalifikowanej nazw
    [ ]
    ) Jeśli język programowania, który jest używany do zapisania tej klasy używana pojęcie obszary nazw, takich jak C#.Jeśli class_name nie określono, SQL Server zakłada się, jest taki sam, jak type_name.

  • <column_definition>
    Definiuje kolumn dla tabela zdefiniowaną przez użytkownika.Aby uzyskać więcej informacji na temat kolumn zobacz Dodawanie i usuwanie kolumn.

  • <Typ danych>
    Określa typ danych kolumna tabela zdefiniowaną przez użytkownika.Aby uzyskać więcej informacji na temat typów danych zobacz Data Types (Transact-SQL). Aby uzyskać więcej informacji o tabelach zobacz CREATE TABLE (Transact-SQL).

  • <column_constraint>
    Określa ograniczenia kolumn dla tabela zdefiniowaną przez użytkownika.Ograniczenia obsługiwanych należą klucz podstawowy, unikatowy i wyboru.Aby uzyskać więcej informacji na temat ograniczeń zobacz Wymuszanie integralność danych. Aby uzyskać więcej informacji o tabelach zobacz CREATE TABLE (Transact-SQL).

  • <computed_column_definition>
    Określa wyrażenie kolumna obliczana jako kolumna w tabela zdefiniowaną przez użytkownika.Aby uzyskać więcej informacji na temat kolumny obliczane zobacz Kolumny obliczanej. Aby uzyskać więcej informacji o tabelach zobacz CREATE TABLE (Transact-SQL).

  • <table_constraint>
    Określa ograniczenie tabela dla tabela zdefiniowaną przez użytkownika.Ograniczenia obsługiwanych należą klucz podstawowy, unikatowy i wyboru.Aby uzyskać więcej informacji na temat ograniczeń tabela zobacz Constraints.

  • <index_option>
    Określa operację na unikatowy klastrowany lub unikatowy indeks nieklastrowany wstawić reakcji błąd na zduplikowane wartości kluczy w wielu wierszy.Aby uzyskać więcej informacji na temat opcji indeksu zobacz CREATE INDEX (języka Transact-SQL).

Remarks

Gdy CREATE typ jest używany do tworzenia środowiska zdefiniowany przez użytkownika typ danych CLR, zgodność bazy danych musi być 90.

Klasa wirtualny plik dziennika, do którego odwołuje się assembly_name, wraz z jego metod należy spełnić wszystkie wymagania dotyczące implementowania typ zdefiniowany przez użytkownika w SQL Server. Aby uzyskać więcej informacji na temat tych wymagań zobacz Środowisko CLR Typy definiowane przez użytkownika.

Dodatkowe zagadnienia są następujące:

  • Klasa może nadmiernie metod, ale tych metod może zostać wywołana tylko z kodem zarządzanym, nie z Transact-SQL.

  • Wszelkie elementy statyczne, musi być zadeklarowany jako Const or tylko do odczytu if assembly_name jest bezpieczne lub EXTERNAL_ACCESS.

W bazie danych może istnieć tylko jeden typ zdefiniowany przez użytkownika zarejestrowany dla określonego typu, który został przekazany w SQL Server od środowiska 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, CREATE typu kończy się niepowodzeniem z powodu błędu.Ograniczenie to jest wymagane w celu uniknięcia niejednoznaczności rozpoznanie typ 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 nieważne, instrukcja CREATE TYPE nie wykonuje.

Aby zmodyfikować typ zdefiniowany przez użytkownika, upuść typu przy użyciu instrukcja DROP TYPE i utworzyć go ponownie.

W odróżnieniu od typów zdefiniowanych przez użytkownika, które zostały utworzone przy użyciu sp_addtype, the publiczne rola bazy danych nie jest automatycznie udzielane uprawnienie materiały referencyjne na typy, które są tworzone przy użyciu typu CREATE.To uprawnienie należy udzielić osobno.

In user-defined table types, structured user-defined types that are used in column_name <data type> are part of the database schema scope in which the table type is defined.Aby uzyskać dostęp do struktury typów zdefiniowanych przez użytkownika w innym zakresie w bazie danych, należy użyć nazwy dwóch części.

W przypadku typów zdefiniowanych przez użytkownika tabela klucz podstawowy na kolumny obliczane musi być UTRWALONE i NOT NULL.

Uprawnienia

Wymaga CREATE TYPE w bieżącej bazie danych i ALTER uprawnienie na schema_name. Jeśli schema_name nie jest określony, zastosowanie zasady domyślne nazwy rozdzielczości do określenia schematu dla bieżącego użytkownika. Jeśli assembly_name jest określony, użytkownik musi albo własnej wirtualny plik dziennika lub uprawnień materiały referencyjne.

Przykłady

A.Tworzenie typ aliasu na podstawie typu danych varchar

Poniższy przykład tworzy typu alias oparte na dostarczanych systemu varchar Typ danych.

CREATE TYPE SSN
FROM varchar(11) NOT NULL ;

B.Tworzenie typ zdefiniowany przez użytkownika

Poniższy przykład tworzy typ Utf8String który odwołuje się do klasy utf8string w zestawie 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 tabela zdefiniowaną przez użytkownika

Poniższy przykład tworzy typ tabela zdefiniowaną przez użytkownika, który zawiera dwie kolumny.Aby uzyskać więcej informacji dotyczących sposobu tworzenia i korzystania z wartości w tabela parametrów zobacz Tabela Valued parametry (aparat bazy danych).

/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE 
    ( LocationName VARCHAR(50)
    , CostRate INT )
GO