CREATE TYPE (Transact-SQL)CREATE TYPE (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Создает в текущей базе данных псевдоним типа данных или определяемый пользователем тип в SQL ServerSQL Server или База данных SQL AzureAzure SQL Database.Creates an alias data type or a user-defined type in the current database in SQL ServerSQL Server or База данных SQL AzureAzure SQL Database. Реализация псевдонима типа данных основывается на собственном системном типе SQL ServerSQL Server.The implementation of an alias data type is based on a SQL ServerSQL Server native system type. Определяемый пользователем тип реализуется с помощью класса сборки в среде MicrosoftMicrosoft.NET Framework.NET Framework CLR.A user-defined type is implemented through a class of an assembly in the MicrosoftMicrosoft.NET Framework.NET Framework common language runtime (CLR). Чтобы привязать определяемый пользователем тип данных к его реализации, сборка среды CLR, содержащая реализацию данного типа, должна быть сначала зарегистрирована в SQL ServerSQL Server с помощью инструкции CREATE ASSEMBLY.To bind a user-defined type to its implementation, the CLR assembly that contains the implementation of the type must first be registered in SQL ServerSQL Server by using CREATE ASSEMBLY.

Возможность выполнения CLR-кода в SQL ServerSQL Server отключена по умолчанию.The ability to run CLR code is off by default in SQL ServerSQL Server. Можно создавать, изменять и удалять объекты базы данных, которые ссылаются на модули управляемого кода, но эти ссылки не будут действовать в SQL ServerSQL Server, если параметр clr enabled не включен с помощью процедуры sp_configure.You can create, modify and drop database objects that reference managed code modules, but these references will not execute in SQL ServerSQL Server unless the clr enabled Option is enabled by using sp_configure.

Примечание

В этом разделе рассматривается интеграция среды CLR .NET Framework с SQL Server.The integration of .NET Framework CLR into SQL Server is discussed in this topic. Интеграция со средой CLR не применяется к База данных SQLSQL Database Azure.CLR integration does not apply to Azure База данных SQLSQL Database.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- User-defined Data Type Syntax    
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> [ ,... n ] }
      [ <table_constraint> ] [ ,... n ]    
      [ <table_index> ] [ ,... 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 }  
}  

< table_index > ::=  
  INDEX constraint_name  
     [ CLUSTERED | NONCLUSTERED ]   (column [ ASC | DESC ] [ ,... n ] )} }  
-- User-defined Memory Optimized Table Types Syntax  
CREATE TYPE [schema_name. ] type_name  
AS TABLE ( { <column_definition> [ ,... n ] }  
    | [ <table_constraint> ] [ ,... n ]    
    | [ <table_index> ] [ ,... n ] } )
    [ WITH ( <table_option> [ ,... n ] ) ]  
 [ ; ]  
  
<column_definition> ::=  
column_name <data_type>  
    [ COLLATE collation_name ]   [ NULL | NOT NULL ]    [  
      [ IDENTITY [ (1 , 1) ]  
    ]  
    [ <column_constraint> [ ... n ] ]    [ <column_index> ]  
  
<data type> ::=  
 [type_schema_name . ] type_name [ (precision [ , scale ]) ]  
  
<column_constraint> ::=  
{ PRIMARY KEY {   NONCLUSTERED HASH WITH (BUCKET_COUNT = bucket_count) 
                | NONCLUSTERED } }  
  
< table_constraint > ::=  
{ PRIMARY KEY { NONCLUSTERED HASH (column [ ,... n ] ) 
                   WITH (BUCKET_COUNT = bucket_count) 
               | NONCLUSTERED  (column [ ASC | DESC ] [ ,... n ] )  } }  
  
<column_index> ::=  
  INDEX index_name  
{ { [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count) 
     | NONCLUSTERED } }  
  
< table_index > ::=  
  INDEX constraint_name  
{ { [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count) 
 |  [NONCLUSTERED]  (column [ ASC | DESC ] [ ,... n ] )} }  
  
<table_option> ::=  
{  
    [MEMORY_OPTIMIZED = {ON | OFF}]  
}  

АргументыArguments

schema_nameschema_name
Имя схемы, к которой относится псевдоним типа данных или определяемый пользователем тип данных.Is the name of the schema to which the alias data type or user-defined type belongs.

type_nametype_name
Имя псевдонима типа данных или определяемого пользователем типа данных.Is the name of the alias data type or user-defined type. Имена типов должны соответствовать требованиям к именам идентификаторов.Type names must comply with the rules for identifiers.

base_typebase_type
Предоставленный SQL ServerSQL Server тип данных, на котором основан тип данных псевдонима.Is the SQL ServerSQL Server supplied data type on which the alias data type is based. Аргумент base_type имеет тип sysname, не имеет значения по умолчанию и может принимать одно из следующих значений:base_type is sysname, with no default, and can be one of the following values:

bigintbigint binary( n )binary( n ) bitbit char( n )char( n )
datedate datetimedatetime datetime2datetime2 datetimeoffsetdatetimeoffset
decimaldecimal floatfloat imageimage intint
moneymoney nchar( n )nchar( n ) ntextntext numericnumeric
nvarchar( n | max)nvarchar( n | max) realreal smalldatetimesmalldatetime smallintsmallint
smallmoneysmallmoney sql_variantsql_variant texttext timetime
tinyinttinyint uniqueidentifieruniqueidentifier varbinary( n | max)varbinary( n | max) varchar( n | max)varchar( n | max)

Аргумент base_type может быть также синонимом любого типа данных, сопоставляемого с одним из этих системных типов данных.base_type can also be any data type synonym that maps to one of these system data types.

precisionprecision
Для типа decimal или numeric является неотрицательным целым числом, которое указывает на максимальное общее число подлежащих сохранению десятичных знаков как слева, так и справа от десятичного разделителя, отделяющего десятичную дробь от целого числа.For decimal or numeric, is a non-negative integer that indicates the maximum total number of decimal digits that can be stored, both to the left and to the right of the decimal point. Дополнительные сведения см. в разделе decimal и numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

масштабscale
Для типа decimal или numeric является неотрицательным целым числом, которое указывает на максимальное общее число подлежащих сохранению десятичных знаков справа от разделителя, отделяющего десятичную дробь от целого числа. Значение должно быть меньше или равно заданной степени точности.For decimal or numeric, is a non-negative integer that indicates the maximum number of decimal digits that can be stored to the right of the decimal point, and it must be less than or equal to the precision. Дополнительные сведения см. в разделе decimal и numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

NULL | NOT NULLNULL | NOT NULL
Указывает, может ли данный тип иметь значение NULL.Specifies whether the type can hold a null value. Если не указано иное, по умолчанию принимается значение NULL.If not specified, NULL is the default.

assembly_nameassembly_name
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Указывает на сборку SQL ServerSQL Server, которая ссылается на реализацию определяемого пользователем типа в среде CLR.Specifies the SQL ServerSQL Server assembly that references the implementation of the user-defined type in the common language runtime. Аргумент assembly_name должен соответствовать существующей сборке в SQL ServerSQL Server в текущей базе данных.assembly_name should match an existing assembly in SQL ServerSQL Server in the current database.

Примечание

Параметр EXTERNAL_NAME недоступен в автономной базе данных.EXTERNAL_NAME is not available in a contained database.

[.[. class_name ]class_name ]
Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Задает класс сборки, реализующей определяемый пользователем тип.Specifies the class within the assembly that implements the user-defined type. Аргумент class_name должен быть допустимым идентификатором и существовать как класс в сборке с видимостью сборки.class_name must be a valid identifier and must exist as a class in the assembly with assembly visibility. Аргумент class_name учитывает регистр символов независимо от параметров сортировки, установленных в библиотеке. Его значение должно точно соответствовать имени класса в соответствующей сборке.class_name is case-sensitive, regardless of the database collation, and must exactly match the class name in the corresponding assembly. Именем класса может быть заключенное в квадратные скобки ( [] ) имя с указанием пространства имен, если в языке программирования, на котором записан класс, используется концепция пространств имен, как, например, в языке C#.The class name can be a namespace-qualified name enclosed in square brackets ([ ]) if the programming language that is used to write the class uses the concept of namespaces, such as C#. Если аргумент class_name не задан, SQL ServerSQL Serverсчитает, что его значение равно значению аргумента type_name.If class_name is not specified, SQL ServerSQL Server assumes it is the same as type_name.

<column_definition><column_definition>
Определяет столбцы для определяемого пользователем табличного типа.Defines the columns for a user-defined table type.

<data type><data type>
Определяет тип данных в столбце для определяемого пользователем табличного типа.Defines the data type in a column for a user-defined table type. Дополнительные сведения о типах данных см. в разделе Типы данных (Transact-SQL).For more information about data types, see Data Types (Transact-SQL). Дополнительные сведения о таблицах см. в разделе CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<column_constraint><column_constraint>
Определяет ограничения столбца для определяемого пользователем табличного типа.Defines the column constraints for a user-defined table type. Из ограничений поддерживаются PRIMARY KEY, UNIQUE и CHECK.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK. Дополнительные сведения о таблицах см. в разделе CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<computed_column_definition><computed_column_definition>
Определяет выражение вычисляемого столбца в качестве столбца в определяемом пользователем табличном типе.Defines a computed column expression as a column in a user-defined table type. Дополнительные сведения о таблицах см. в разделе CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<table_constraint><table_constraint>
Определяет ограничение таблицы на основе определяемого пользователем табличного типа.Defines a table constraint on a user-defined table type. Из ограничений поддерживаются PRIMARY KEY, UNIQUE и CHECK.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK.

<index_option><index_option>
Определяет реакцию на ошибку, возникшую из-за дублирования значений ключа при вставке нескольких строк в уникальный кластеризованный или уникальный некластеризованный индекс.Specifies the error response to duplicate key values in a multiple-row insert operation on a unique clustered or unique nonclustered index. Дополнительные сведения о параметрах индекса см. в разделе CREATE INDEX (Transact-SQL).For more information about index options, see CREATE INDEX (Transact-SQL).

INDEX *index_name* [ CLUSTERED | NONCLUSTERED ] (*column_name* [ ASC | DESC ] [ ,... *n* ] )

Применимо к: с SQL Server 2014 (12.x)SQL Server 2014 (12.x) до SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Задает создание индекса для таблицы.Specifies to create an index on the table. Это может быть кластеризованный или некластеризованный индекс.This can be a clustered index, or a nonclustered index. Индекс будет содержать указанные столбцы и сортировать данные по возрастанию или убыванию.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEXINDEX
Индексы столбцов и таблиц необходимо указывать в составе инструкции CREATE TABLE.You must specify column and table indexes as part of the CREATE TABLE statement. DROP INDEX и CREATE INDEX не поддерживаются для таблиц, оптимизированных для памяти.CREATE INDEX and DROP INDEX are not supported for memory-optimized tables.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
Применимо к: с SQL Server 2014 (12.x)SQL Server 2014 (12.x) до SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает, является ли тип таблицы оптимизированным для памяти.Indicates whether the table type is memory optimized. Этот параметр по умолчанию выключен. Таблица (тип) не является таблицей (типом), оптимизированной для памяти.This option is off by default; the table (type) is not a memory optimized table (type). Оптимизированные для памяти типы таблицы — это оптимизированные для памяти пользовательские таблицы, схемы которых, как и схемы других пользовательских таблиц, сохраняются на диске.Memory optimized table types are memory-optimized user tables, the schema of which is persisted on disk similar to other user tables.

BUCKET_COUNTBUCKET_COUNT
Применимо к: с SQL Server 2014 (12.x)SQL Server 2014 (12.x) до SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Отображает число контейнеров, которые необходимо создать в хэш-индексе.Indicates the number of buckets that should be created in the hash index. Максимальное значение для параметра BUCKET_COUNT в хэш-индексах составляет 1 073 741 824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Дополнительные сведения о числах контейнеров см. в разделе Индексы для таблиц, оптимизированных для памяти.For more information about bucket counts, see Indexes for Memory-Optimized Tables. bucket_count — это обязательный аргумент.bucket_count is a required argument.

HASHHASH
Применимо к: с SQL Server 2014 (12.x)SQL Server 2014 (12.x) до SQL Server 2017SQL Server 2017 и База данных SQL AzureAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and База данных SQL AzureAzure SQL Database.

Указывает, что был создан индекс HASH.Indicates that a HASH index is created. Хэш-индексы поддерживаются только в таблицах, оптимизированных для памяти.Hash indexes are supported only on memory optimized tables.

RemarksRemarks

И класс сборки, ссылка на который содержится в assembly_name, и его методы должны удовлетворять требованиям, предъявляемым при реализации определяемых пользователем типов в SQL ServerSQL Server.The class of the assembly that is referenced in assembly_name, together with its methods, should satisfy all the requirements for implementing a user-defined type in SQL ServerSQL Server. Дополнительные сведения об этих требованиях см. в статье Определяемые пользователем типы CLR.For more information about these requirements, see CLR User-Defined Types.

К числу дополнительных соображений относятся следующие:Additional considerations include the following:

  • данный класс может иметь перегруженные методы, но эти методы могут вызываться только из управляемого кода, а не с помощью языка Transact-SQLTransact-SQL;The class can have overloaded methods, but these methods can be called only from within managed code, not from Transact-SQLTransact-SQL.

  • все статические члены должны быть объявлены как const или readonly, если аргумент assembly_name имеет значение SAFE или EXTERNAL_ACCESS.Any static members must be declared as const or readonly if assembly_name is SAFE or EXTERNAL_ACCESS.

Внутри базы данных может существовать только один определяемый пользователем тип, зарегистрированный на основе любого указанного типа, который был загружен в SQL ServerSQL Server из CLR.Within a database, there can be only one user-defined type registered against any specified type that has been uploaded in SQL ServerSQL Server from the CLR. Если определяемый пользователем тип создается на основе типа CLR, для которого в этой базе данных уже существует пользовательский тип, инструкция CREATE TYPE вызывает сбой.If a user-defined type is created on a CLR type for which a user-defined type already exists in the database, CREATE TYPE fails with an error. Это ограничение необходимо для того, чтобы избежать неоднозначности при разрешении типа SQL Type, если тип CLR может соответствовать более чем одному определяемому пользователем типу.This restriction is required to avoid ambiguity during SQL Type resolution if a CLR type can be mapped to more than one user-defined type.

Если какой-либо метод-мутатор в данном типе не возвращает значения void, инструкция CREATE TYPE не выполняется.If any mutator method in the type does not return void, the CREATE TYPE statement does not execute.

Чтобы внести изменения в определяемый пользователем тип, нужно удалить этот тип с помощью инструкции DROP TYPE и затем снова создать его.To modify a user-defined type, you must drop the type by using a DROP TYPE statement and then re-create it.

В отличие от определяемых пользователем типов, созданных с помощью хранимой процедуры sp_addtype, разрешение REFERENCES на типы, созданные с помощью инструкции CREATE TYPE, не предоставляется роли базы данных public автоматически.Unlike user-defined types that are created by using sp_addtype, the public database role is not automatically granted REFERENCES permission on types that are created by using CREATE TYPE. Это разрешение должно предоставляться отдельно.This permission must be granted separately.

В определяемых пользователем табличных типах определяемые пользователем структурированные типы, используемые в column_name <data type>, представляют собой часть области схемы базы данных, в которой определен тип таблицы.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. Чтобы получить доступ к определяемым пользователем структурированным типам в другой области базы данных, используйте двухкомпонентные имена.To access structured user-defined types in a different scope within the database, use two-part names.

В определяемых пользователем табличных типах первичный ключ на вычисляемых столбцах должен иметь атрибуты PERSISTED и NOT NULL.In user-defined table types, the primary key on computed columns must be PERSISTED and NOT NULL.

Оптимизированные для памяти типы таблицMemory-Optimized Table Types

Начиная с версии SQL Server 2014 (12.x)SQL Server 2014 (12.x), обработка данных в типе таблицы может выполняться в основной памяти, но не на диске.Beginning in SQL Server 2014 (12.x)SQL Server 2014 (12.x), processing data in a table type can be done in primary memory, and not on disk. Дополнительные сведения см. в разделе In-Memory OLTP (оптимизация в памяти).For more information, see In-Memory OLTP (In-Memory Optimization). Примеры кода по созданию типов оптимизированных для памяти таблиц см. в разделе Создание таблиц, оптимизированных для памяти, и хранимых процедур, скомпилированных в собственном коде.For code samples showing how to create memory-optimized table types, see Creating a Memory-Optimized Table and a Natively Compiled Stored Procedure.

РазрешенияPermissions

Требует разрешения CREATE TYPE в текущей базе данных и разрешения ALTER для схемы schema_name.Requires CREATE TYPE permission in the current database and ALTER permission on schema_name. Если аргумент schema_name не указан, в действие вступают принимаемые по умолчанию правила разрешения имен с целью определения схемы для текущего пользователя.If schema_name is not specified, the default name resolution rules for determining the schema for the current user apply. Если аргумент assembly_name указан, пользователь должен либо быть владельцем данной сборки, либо иметь разрешение REFERENCES для работы с ней.If assembly_name is specified, a user must either own the assembly or have REFERENCES permission on it.

Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к определяемому пользователем типу данных, необходимо иметь разрешение REFERENCES на него.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

Примечание

После создания таблицы со столбцом, который использует определяемый пользователем тип, потребуется разрешение REFERENCES для работы с такими типами.A user creating a table with a column that uses a user-defined type needs the REFERENCES permission on the user-defined type. Если эта таблица должна создаваться в базе данных TempDB, либо разрешение REFERENCES должно предоставляться явным образом перед каждой процедурой создания таблицы, либо этот тип данных и разрешения REFERENCES нужно добавить в базу данных модели.If this table must be created in TempDB, then either the REFERENCES permission needs to be granted explicitly each time before the table is created, or this data type and REFERENCES permissions need to be added to the Model database. В таком случае этот тип данных и разрешения будут всегда доступны в базе данных TempDB.If this is done, then this data type and permissions will be available in TempDB permanently. В противном случае определяемый пользователем тип данных и разрешения нельзя будет использовать после перезапуска SQL Server.Otherwise, the user-defined data type and permissions will disappear when SQL Server is restarted. Дополнительные сведения см. в разделе CREATE TABLE.For more information, see CREATE TABLE

ПримерыExamples

A.A. Создание псевдонима на базе типа данных varcharCreating an alias type based on the varchar data type

В следующем примере создается псевдоним на базе определенного в системе типа данных varchar.The following example creates an alias type based on the system-supplied varchar data type.

CREATE TYPE SSN  
FROM varchar(11) NOT NULL ;  

Б.B. Создание определяемого пользователем типаCreating a user-defined type

В следующем примере создается тип Utf8String, который ссылается на класс utf8string в сборке utf8string.The following example creates a type Utf8String that references class utf8string in the assembly utf8string. Перед тем как приступить к созданию этого типа, сборка utf8string регистрируется в локальной базе данных.Before creating the type, assembly utf8string is registered in the local database. Замените двоичную часть инструкции CREATE ASSEMBLY на допустимое описание.Replace the binary portion of the CREATE ASSEMBLY statement with a valid description.

Применимо к: с SQL Server 2008SQL Server 2008 до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

CREATE ASSEMBLY utf8string  
AUTHORIZATION [dbi]   
FROM 0x4D... ;  
GO  
CREATE TYPE Utf8String   
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;  
GO  

В.C. Создание определяемого пользователем табличного типаCreating a user-defined table type

В следующем примере создается определяемый пользователем табличный тип, который имеет два столбца.The following example creates a user-defined table type that has two columns. Дополнительные сведения о создании и использовании возвращающих табличное значение параметрах см. в разделе Использование параметров, возвращающих табличные значения (ядро СУБД).For more information about how to create and use table-valued parameters, see Use Table-Valued Parameters (Database Engine).

CREATE TYPE LocationTableType AS TABLE   
    ( LocationName VARCHAR(50)  
    , CostRate INT );  
GO  

Г.D. Создание определяемого пользователем табличного типа с первичным узлом и индексомCreating a user-defined table type with primary key and index

В следующем примере создается определяемый пользователем табличный тип с тремя столбцами, один из которых (Name) является первичным ключом, а другой (Price) имеет некластеризованный индекс.The following example creates a user-defined table type that has three columns, one of which (Name) is the primary key and another (Price) has a non-clustered index. Дополнительные сведения о создании и использовании возвращающих табличное значение параметрах см. в разделе Использование параметров, возвращающих табличные значения (ядро СУБД).For more information about how to create and use table-valued parameters, see Use Table-Valued Parameters (Database Engine).

CREATE TYPE InventoryItem AS TABLE
(
    [Name] NVARCHAR(50) NOT NULL,
    SupplierId BIGINT NOT NULL,
    Price DECIMAL (18, 4) NULL,
    PRIMARY KEY (
        Name
    ),
    INDEX IX_InventoryItem_Price (
        Price
    )
)
GO

См. также:See Also

CREATE ASSEMBLY (Transact-SQL) CREATE ASSEMBLY (Transact-SQL)
DROP TYPE (Transact-SQL) DROP TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)