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

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Erstellt einen Aliasdatentyp oder einen benutzerdefinierten Typ in der aktuellen Datenbank in SQL ServerSQL Server oder Azure SQL-DatenbankAzure SQL Database.Creates an alias data type or a user-defined type in the current database in SQL ServerSQL Server or Azure SQL-DatenbankAzure SQL Database. Die Implementierung eines Aliasdatentyps basiert auf einem systemeigenen Typ von SQL ServerSQL Server.The implementation of an alias data type is based on a SQL ServerSQL Server native system type. Ein benutzerdefinierter Typ wird durch eine Klasse einer Assembly in der Common Language Runtime (CLR) von MicrosoftMicrosoft.NET Framework.NET Framework implementiert.A user-defined type is implemented through a class of an assembly in the MicrosoftMicrosoft.NET Framework.NET Framework common language runtime (CLR). Um einen benutzerdefinierten Typ an seine Implementierung zu binden, muss die CLR-Assembly, die die Implementierung des Typs enthält, zuerst in SQL ServerSQL Server mit CREATE ASSEMBLY registriert werden.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.

Die Option zum Ausführen von CLR-Code ist standardmäßig in SQL ServerSQL Server deaktiviert.The ability to run CLR code is off by default in SQL ServerSQL Server. Sie können Datenbankobjekte, die auf verwaltete Codemodule verweisen, erstellen, ändern und löschen. Diese Verweise werden jedoch nur dann in SQL ServerSQL Server ausgeführt, wenn die Option clr enabled mithilfe von sp_configure aktiviert wird.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.

Hinweis

Die Integration der .NET Framework-CLR in SQL Server wird in diesem Thema erläutert.The integration of .NET Framework CLR into SQL Server is discussed in this topic. Die CLR-Integration gilt nicht für Azure SQL-DatenbankSQL Database.CLR integration does not apply to Azure SQL-DatenbankSQL Database.

Themenlinksymbol Transact-SQL-SyntaxkonventionenTopic link icon Transact-SQL Syntax Conventions

SyntaxSyntax

-- 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}]  
}  

ArgumenteArguments

schema_nameschema_name
Der Name des Schemas, dem der Aliasdatentyp oder benutzerdefinierte Typ angehört.Is the name of the schema to which the alias data type or user-defined type belongs.

type_nametype_name
Der Name des Aliasdatentyps oder benutzerdefinierten Datentyps.Is the name of the alias data type or user-defined type. Typnamen müssen den Regeln für Bezeichner entsprechen.Type names must comply with the rules for identifiers.

base_typebase_type
Ist der von SQL ServerSQL Server bereitgestellte Datentyp, auf dem der Aliasdatentyp basiert.Is the SQL ServerSQL Server supplied data type on which the alias data type is based. base_type ist vom Datentyp sysname und hat keinen Standardwert. Folgende Werte sind möglich: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 kann außerdem jedes Synonym für Datentypen sein, das einem dieser Systemdatentypen zugeordnet wird.base_type can also be any data type synonym that maps to one of these system data types.

precisionprecision
Für decimal oder numeric: Eine nicht negative ganze Zahl, die die maximale Anzahl von Dezimalstellen angibt, die vor und nach dem Dezimaltrennzeichen gespeichert werden können.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. Weitere Informationen finden Sie unter decimal und numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

scalescale
Für decimal oder numeric: Eine nicht negative ganze Zahl, die die maximale Anzahl von Dezimalstellen angibt, die nach dem Dezimalzeichen gespeichert werden können. Diese Zahl muss kleiner oder gleich der Gesamtzahl der Stellen sein.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. Weitere Informationen finden Sie unter decimal und numeric (Transact-SQL).For more information, see decimal and numeric (Transact-SQL).

NULL | NOT NULLNULL | NOT NULL
Gibt an, ob für den Typ NULL-Werte zulässig sind.Specifies whether the type can hold a null value. Wird keine Angabe gemacht, ist NULL der Standardwert.If not specified, NULL is the default.

assembly_nameassembly_name
Gilt für: SQL Server 2008SQL Server 2008 bis SQL ServerSQL Server.Applies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server.

Gibt die SQL ServerSQL Server-Assembly an, die auf die Implementierung des benutzerdefinierten Typs in der Common Language Runtime (CLR) verweist.Specifies the SQL ServerSQL Server assembly that references the implementation of the user-defined type in the common language runtime. assembly_name sollte einer vorhandenen Assembly in SQL ServerSQL Server in der aktuellen Datenbank entsprechen.assembly_name should match an existing assembly in SQL ServerSQL Server in the current database.

Hinweis

EXTERNAL_NAME ist in einer eigenständigen Datenbank nicht verfügbar.EXTERNAL_NAME is not available in a contained database.

[.[. class_name ]class_name ]
Gilt für: SQL Server 2008SQL Server 2008 bis SQL ServerSQL Server.Applies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server.

Gibt die Klasse innerhalb der Assembly an, die den benutzerdefinierten Typ implementiert.Specifies the class within the assembly that implements the user-defined type. class_name muss ein gültiger Bezeichner sein und als Klasse mit Assemblysichtbarkeit in der Assembly vorhanden sein.class_name must be a valid identifier and must exist as a class in the assembly with assembly visibility. Bei class_name muss unabhängig von der Datenbanksortierung die Groß-/Kleinschreibung beachtet werden, und der Wert muss genau dem Klassennamen in der entsprechenden Assembly entsprechen.class_name is case-sensitive, regardless of the database collation, and must exactly match the class name in the corresponding assembly. Der Klassenname kann ein mit einem Namespace qualifizierter Name sein, der in eckigen Klammern ( [ ] ) steht, wenn die Programmiersprache, die zum Schreiben der Klasse verwendet wird, das Konzept von Namespaces verwendet, wie z.B. 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#. Wenn class_name nicht angegeben ist, geht SQL ServerSQL Server davon aus, dass der Wert mit type_name identisch ist.If class_name is not specified, SQL ServerSQL Server assumes it is the same as type_name.

<column_definition><column_definition>
Definiert die Spalten für einen benutzerdefinierten Tabellentyp.Defines the columns for a user-defined table type.

<data type><data type>
Definiert die Datentypen in einer Spalten für einen benutzerdefinierten Tabellentyp.Defines the data type in a column for a user-defined table type. Weitere Informationen zu Datentypen finden Sie unter Datentypen (Transact-SQL).For more information about data types, see Data Types (Transact-SQL). Weitere Informationen zu Tabellen finden Sie unter CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<column_constraint><column_constraint>
Definiert die Spalteneinschränkungen für einen benutzerdefinierten Tabellentyp.Defines the column constraints for a user-defined table type. Unterstützte Einschränkungen schließen PRIMARY KEY, UNIQUE und CHECK ein.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK. Weitere Informationen zu Tabellen finden Sie unter CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<computed_column_definition><computed_column_definition>
Definiert einen berechneten Spaltenausdruck in einem benutzerdefinierten Tabellentyp als Spalte.Defines a computed column expression as a column in a user-defined table type. Weitere Informationen zu Tabellen finden Sie unter CREATE TABLE (Transact-SQL).For more information about tables, see CREATE TABLE (Transact-SQL).

<table_constraint><table_constraint>
Definiert eine Spalteneinschränkung für einen benutzerdefinierten Tabellentyp.Defines a table constraint on a user-defined table type. Unterstützte Einschränkungen schließen PRIMARY KEY, UNIQUE und CHECK ein.Supported constraints include PRIMARY KEY, UNIQUE, and CHECK.

<index_option><index_option>
Gibt die Fehlerantwort auf doppelte Schlüsselwerte beim Einfügen mehrerer Zeilen für einen eindeutigen gruppierten oder einen eindeutigen nicht gruppierten Index an.Specifies the error response to duplicate key values in a multiple-row insert operation on a unique clustered or unique nonclustered index. Weitere Informationen zu Indexoptionen finden Sie unter 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* ] )

Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass ein Index in der Tabelle erstellt werden soll.Specifies to create an index on the table. Dies kann ein gruppierter oder ein nicht gruppierter Index sein.This can be a clustered index, or a nonclustered index. Der Index enthält die aufgelisteten Spalten und sortiert die Daten in aufsteigender oder absteigender Reihenfolge.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEXINDEX
Sie müssen Spalten- und Tabellenindizes als Teil der CREATE TABLE-Anweisung angeben.You must specify column and table indexes as part of the CREATE TABLE statement. CREATE INDEX und DROP INDEX werden für speicheroptimierte Tabellen nicht unterstützt.CREATE INDEX and DROP INDEX are not supported for memory-optimized tables.

MEMORY_OPTIMIZEDMEMORY_OPTIMIZED
Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database.

Gibt an, ob der Tabellentyp speicheroptimiert ist.Indicates whether the table type is memory optimized. Diese Option ist standardmäßig deaktiviert; die Tabelle (der Tabellentyp) ist keine speicheroptimierte Tabelle (kein speicheroptimierter Tabellentyp).This option is off by default; the table (type) is not a memory optimized table (type). Speicheroptimierte Tabellentypen sind speicheroptimierte Benutzertabellen, deren Schema auf dem Datenträger ähnlich anderen Benutzertabellen beibehalten wird.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
Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database.

Gibt die Anzahl der Buckets an, die im Hashindex erstellt werden sollen.Indicates the number of buckets that should be created in the hash index. Der maximale Wert für BUCKET_COUNT in Hashindizes beträgt 1.073.741.824.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. Weitere Informationen zu Indizes für speicheroptimierte Tabellen finden Sie unter Indexes for Memory-Optimized Tables (Indizes für speicheroptimierte Tabellen).For more information about bucket counts, see Indexes for Memory-Optimized Tables. bucket_count ist ein erforderliches Argument.bucket_count is a required argument.

HASHHASH
Gilt für: SQL Server 2014 (12.x)SQL Server 2014 (12.x) bis SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) through SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database.

Gibt an, dass ein HASH-Index erstellt wird.Indicates that a HASH index is created. Hashindizes werden nur für speicheroptimierte Tabellen unterstützt.Hash indexes are supported only on memory optimized tables.

BemerkungenRemarks

Die Klasse der Assembly, auf die in assembly_name verwiesen wird, und ihre Methoden sollten alle Anforderungen zum Implementieren eines benutzerdefinierten Typs in SQL ServerSQL Server erfüllen.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. Weitere Informationen zu diesen Anforderungen finden Sie unter CLR User-Defined Types (Benutzerdefinierte CLR-Typen).For more information about these requirements, see CLR User-Defined Types.

Noch einige zusätzliche Überlegungen:Additional considerations include the following:

  • Die Klasse kann überlastete Methoden umfassen, aber diese Methoden können nur innerhalb von verwaltetem Code aufgerufen werden und nicht aus 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.

  • Alle statischen Elemente müssen als const oder readonly deklariert werden, wenn für assembly_name entweder SAFE oder EXTERNAL_ACCESS festgelegt wurde.Any static members must be declared as const or readonly if assembly_name is SAFE or EXTERNAL_ACCESS.

Innerhalb einer Datenbank kann nur ein benutzerdefinierter Typ für einen angegebenen Typ registriert werden, der in SQL ServerSQL Server von der CLR hochgeladen wurde.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. Wenn ein benutzerdefinierter Typ für einen CLR-Typ erstellt wurde, für den in der Datenbank bereits ein benutzerdefinierter Typ vorhanden ist, schlägt CREATE TYPE fehl und gibt einen Fehler aus.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. Diese Einschränkung ist erforderlich, um eine Mehrdeutigkeit bei der Zuordnung des SQL-Typs zu vermeiden, wenn ein CLR-Typ mehr als einem benutzerdefinierten Typ zugeordnet werden kann.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.

Gibt eine Mutatormethode im Typ nicht void zurück, wird die CREATE TYPE-Anweisung nicht ausgeführt.If any mutator method in the type does not return void, the CREATE TYPE statement does not execute.

Zum Ändern eines benutzerdefinierten Typs müssen Sie den Typ mit einer DROP TYPE-Anweisung löschen und ihn dann erneut erstellen.To modify a user-defined type, you must drop the type by using a DROP TYPE statement and then re-create it.

Im Gegensatz zu benutzerdefinierten Typen, die mit sp_addtype erstellt wurden, wird der Datenbankrolle public nicht automatisch die REFERENCES-Berechtigung für Typen erteilt, die mit CREATE TYPE erstellt wurden.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. Diese Berechtigung muss separat erteilt werden.This permission must be granted separately.

Strukturierte benutzerdefinierte Typen, die in column_name <data type> verwendet werden, gehören in benutzerdefinierten Tabellentypen zum Bereich des Datenbankschemas, in dem der Tabellentyp definiert wird.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. Um auf strukturierte benutzerdefinierte Typen in einem anderen Bereich innerhalb der Datenbank zuzugreifen, verwenden Sie zweiteilige Namen.To access structured user-defined types in a different scope within the database, use two-part names.

In benutzerdefinierten Tabellentypen muss der Primärschlüssel für berechnete Spalten PERSISTED und NOT NULL sein.In user-defined table types, the primary key on computed columns must be PERSISTED and NOT NULL.

Speicheroptimierte TabellentypenMemory-Optimized Table Types

Ab SQL Server 2014 (12.x)SQL Server 2014 (12.x) kann die Verarbeitung von Daten in einem Tabellentyp im Primärspeicher und nicht auf dem Datenträger erfolgen.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. Weitere Informationen finden Sie unter In-Memory OLTP (Arbeitsspeicheroptimierung).For more information, see In-Memory OLTP (In-Memory Optimization). Codebeispiele, die das Erstellen speicheroptimierter Tabellentypen veranschaulichen, finden Sie unter Erstellen einer speicheroptimierten Tabelle und einer systemintern kompilierten gespeicherten Prozedur.For code samples showing how to create memory-optimized table types, see Creating a Memory-Optimized Table and a Natively Compiled Stored Procedure.

BerechtigungenPermissions

Erfordert die CREATE TYPE-Berechtigung für die aktuelle Datenbank und die ALTER-Berechtigung für schema_name.Requires CREATE TYPE permission in the current database and ALTER permission on schema_name. Wenn schema_name nicht angegeben wird, gelten die Standardregeln für die Namensauflösung, um das Schema für den aktuellen Benutzer zu bestimmen.If schema_name is not specified, the default name resolution rules for determining the schema for the current user apply. Wird assembly_name angegeben, muss ein Benutzer entweder Besitzer der Assembly sein oder die REFERENCES-Berechtigung für die Assembly besitzen.If assembly_name is specified, a user must either own the assembly or have REFERENCES permission on it.

Wenn in der CREATE TABLE-Anweisung eine Spalte als Spalte eines benutzerdefinierten Typs definiert wird, ist die REFERENCES-Berechtigung für den benutzerdefinierten Typ erforderlich.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.

Hinweis

Eine Benutzer, der eine Tabelle mit einer Spalte erstellt, die einen benutzerdefinierten Typ verwendet, benötigt die REFERENCES-Berechtigung für den benutzerdefinierten Typ.A user creating a table with a column that uses a user-defined type needs the REFERENCES permission on the user-defined type. Wenn diese Tabelle in TempDB erstellt werden muss, muss entweder vor jedem Erstellen der Tabelle die REFERENCES-Berechtigung explizit erteilt werden, oder der betreffende Datentyp und die REFERENCES-Berechtigungen müssen der Modelldatenbank hinzugefügt werden.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. Wenn dies erfolgt ist, stehen der betreffende Datentyp und die Berechtigungen dauerhaft in TempDB zur Verfügung.If this is done, then this data type and permissions will be available in TempDB permanently. Andernfalls verschwinden der benutzerdefinierte Datentyp und die Berechtigungen bei einem Neustart von SQL Server.Otherwise, the user-defined data type and permissions will disappear when SQL Server is restarted. Weitere Informationen finden Sie unter CREATE TABLEFor more information, see CREATE TABLE

BeispieleExamples

A.A. Erstellen eines Aliastyps anhand des varchar-DatentypsCreating an alias type based on the varchar data type

Im folgenden Beispiel wird ein Aliastyp erstellt, der auf dem vom System bereitgestellten Datentyp varchar basiert.The following example creates an alias type based on the system-supplied varchar data type.

CREATE TYPE SSN  
FROM varchar(11) NOT NULL ;  

B.B. Erstellen eines benutzerdefinierten TypsCreating a user-defined type

Im folgenden Beispiel wird der Typ Utf8String erstellt, der auf die Klasse utf8string in der Assembly utf8string verweist.The following example creates a type Utf8String that references class utf8string in the assembly utf8string. Vor dem Erstellen des Typs wird die Assembly utf8string in der lokalen Datenbank registriert.Before creating the type, assembly utf8string is registered in the local database. Ersetzen Sie den binären Teil der CREATE ASSEMBLY-Anweisung durch eine gültige Beschreibung.Replace the binary portion of the CREATE ASSEMBLY statement with a valid description.

Gilt für: SQL Server 2008SQL Server 2008 bis SQL ServerSQL Server.Applies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server.

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

C.C. Erstellen eines benutzerdefinierten TabellentypsCreating a user-defined table type

Das folgende Beispiel zeigt, wie ein benutzerdefinierter Tabellentyp mit zwei Spalten erstellt wird:The following example creates a user-defined table type that has two columns. Weitere Informationen zum Erstellen und Verwenden von Tabellenwertparametern finden Sie unter Use Table-Valued Parameters (Database Engine) (Verwenden von Tabellenwertparametern (Datenbank-Engine)).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.D. Erstellen eines benutzerdefinierten Tabellentyp mit Primärschlüssel und IndexCreating a user-defined table type with primary key and index

Im folgenden Beispiel wird ein benutzerdefinierter Tabellentyp mit drei Spalten erstellt, von denen eine (Name) der Primärschlüssel und eine andere (Price) ein nicht gruppierter Index ist.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 nonclustered index. Weitere Informationen zum Erstellen und Verwenden von Tabellenwertparametern finden Sie unter Use Table-Valued Parameters (Database Engine) (Verwenden von Tabellenwertparametern (Datenbank-Engine)).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

Weitere InformationenSee Also

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