CREATE TYPE (Transact-SQL)

Diğer ad veri türü veya kullanıcı tanımlı bir türü geçerli veritabanında oluşturur. Diğer ad veri türü uygulanmasına dayanır bir SQL Serveryerli sistem türü. Bir kullanıcı tanımlı türü bir derlemede sınıfı aracılığıyla gerçekleştirilir Microsoft  .NET Frameworkortak dil çalışma zamanı (clr). Bir kullanıcı tanımlı türü için uygulanması bağlamak için clr derlemesi Uygulama türü içeren ilk kayıtlı olmalıdır SQL Serverkullanarak create assembly.

[!NOT]

clr kodu çalıştırma özelliği varsayılan olarak kapalıdır SQL Server. Oluşturmak, değiştirmek ve yönetilen kod modüllerinin başvuru veritabanı nesnelerini bırakın, ama bu başvurular içinde çalıştırmaz SQL Serversürece clr seçeneği etkin kullanarak etkin sp_configure.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

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

Bağımsız değişkenler

  • schema_name
    Diğer ad veri türü veya kullanıcı tanımlı türü ait olduğu şema addır.

  • type_name
    Diğer ad veri türü veya kullanıcı tanımlı türü addır. Türü adları için kuralları ile uymak gerekir tanımlayıcıları.

  • base_type
    İse SQL Serverad veri türü temel veri türü sağlanan. base_type's sysname, hiçbir varsayılan ve can ile aşağıdaki değerlerden biri:

    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_typeAyrıca bu sistem veri türlerinden birini eşleştiren herhangi bir veri türü eşanlamlı olabilir.

  • precision
    İçin decimalveya numeric, toplam sayısını, hem sol hem de ondalık noktanın sağındaki depolanabilir ondalık basamak belirten bir negatif tamsayıdır. Daha fazla bilgi için, bkz. ondalık ve sayısal (Transact-sql).

  • scale
    İçin decimalveya numeric, ondalık noktanın sağında depolanabilir ondalık basamak sayısını gösteren, negatif olmayan bir tamsayı olduğundan ve hassas küçük veya eşit olması gerekir. Daha fazla bilgi için, bkz. ondalık ve sayısal (Transact-sql).

  • NULL | BOŞ DEĞİL
    Türü null değeri basılı olup olmadığını belirtir. Aksi takdirde belirtilen, null varsayılan değerdir.

  • assembly_name
    Belirtir SQL Serverderleme başvuran kullanıcı tanımlı türü ortak dil çalışma zamanı uygulaması. assembly_name Varolan bir derlemede eşleşmesi gereken SQL Servergeçerli veritabanında.

    [!NOT]

    external_name bulunan bir veritabanında kullanılamaz.

  • [.class_name ]
    Kullanıcı tanımlı türü uygulayan derleme içindeki sınıf belirtir. class_namegeçerli bir tanımlayıcı olmalıdır ve derleme görünürlüğü ile derleme bir sınıf olarak bulunmalıdır. class_nameveritabanı harmanlama bakılmaksızın duyarlıdır ve ilgili derleme sınıfın adıyla tam olarak eşleşmelidir. Sınıf adı köşeli parantez içine bir ad alanıyla nitelenmiş ad olabilir (
    []
    ) ad alanları, C# gibi kavramının sınıf yazmak için kullanılan programlama dili kullanıyorsa. Eğer class_namebelirtilmemiş, SQL Serveraynı olduğunu varsayar type_name.

  • <column_definition>
    Kullanıcı tanımlı tablo türü sütunları tanımlar.

  • <veri türü>
    Kullanıcı tanımlı tablo türü bir sütundaki veri türünü tanımlar. Veri türleri hakkında daha fazla bilgi için bkz: Veri Türleri (Transact-SQL). Tablolar hakkında daha fazla bilgi için bkz: Tablo (Transact-sql) oluştur.

  • <column_constraint>
    Tablo kullanıcı tanımlı türü sütun kısıtlamaları tanımlar. Desteklenen kısıtlamaları, PRIMARY key, UNIQUE ve check içerir. Tablolar hakkında daha fazla bilgi için bkz: Tablo (Transact-sql) oluştur.

  • <computed_column_definition>
    Bir hesaplanan sütun ifade tablo kullanıcı tanımlı türü sütun olarak tanımlar. Tablolar hakkında daha fazla bilgi için bkz: Tablo (Transact-sql) oluştur.

  • <table_constraint>
    Kullanıcı tanımlı tablo türü bir tablo kısıtlaması tanımlar. Desteklenen kısıtlamaları, PRIMARY key, UNIQUE ve check içerir.

  • <index_option>
    Hata yanıt-e doğru yinelenen anahtar değerleri bir çoklu-satır ekleme işlemi benzersiz kümelenmiş veya benzersiz kümelendirilmemiş dizini belirtir. Dizin seçenekleri hakkında daha fazla bilgi için bkz: Index (Transact-sql) oluştur.

Açıklamalar

Kullanıcı tanımlı bir clr türü oluşturmak için create type kullanıldığında, veritabanı uyumluluk 90 olmalıdır.

Başvurulan derleme sınıfı assembly_name, kendi yöntemleri ile birlikte bir kullanıcı tanımlı türü uygulamak için tüm gereksinimleri karşılamak gerekir SQL Server. Bu gereksinimler hakkında daha fazla bilgi için bkz: clr kullanıcı tanımlı türler.

Dikkat edilecek diğer noktalar arasında şunlar yer alır:

  • Sınıf yöntemleri aşırı, ama bu yöntemler yalnızca yönetilen kod içinde değil çağrılabilir Transact-SQL.

  • Herhangi bir statik üyeleri olarak bildirilmelidir const veya salt okunur , assembly_nameKasa veya external_access.

Bir veritabanı içinde olabilir sadece bir kullanıcı tanımlı türü kayıtlı olarak yüklenen herhangi bir belirtilen tür karşı SQL Servergelen clr. create type, kendisi için bir kullanıcı tanımlı türü veritabanında zaten clr türü kullanıcı tanımlı bir türü oluşturduysanız, bir hata ile başarısız olur. Bu kısıtlamayı birden çok türü kullanıcı tanımlı bir clr türü eşlenebilir eğer sql türü çözümlemesi sırasında belirsizlik önlemek için gereklidir.

Eğer herhangi bir mutator yöntemi türü dönmek değil void, create type deyimi yürütme değil.

Bir kullanıcı tanımlı türü değiştirmek için türü type drop deyimi kullanarak bırakın ve sonra yeniden oluşturun.

Aksine kullanarak oluşturulan kullanıcı tanımlı türleri sp_addtype, Genel veritabanı rolü otomatik olarak verilmiş başvurular izni create type kullanılarak oluşturulan türleri. Bu ayrı ayrı izni gerekir.

Kullanıcı tanımlı tablo türleri'nde, içinde kullanılan kullanıcı tanımlı türleri yapısal column_name <veri türü > tablo türü tanımlı veritabanı şema kapsamlı bir parçası. Yapılandırılmış kullanıcı tanımlı türler veritabanı içindeki farklı kapsamda erişmek için Şemaiki bölümü adları kullanın.

Kullanıcı tanımlı tablo türleri, hesaplanmış sütunları birincil anahtar kalıcı ve not null.

İzinler

Tarih geçerli veritabanındaki create type izni ve alter izni gerektirir schema_name. Eğer schema_namebelirtilmemişse, geçerli kullanıcı için şema belirlemek için varsayılan ad çözümleme kurallarının uygulandığını. Eğer assembly_namebelirtilirse, kullanıcı derleme sahibi veya görüneceği başvurular izni var

Örnekler

A.Varchar veri türüne göre bir diğer ad türü oluşturma

Aşağıdaki örnek, geçerli sistem tarafından sağlanan ad türü oluşturur varcharveri türü.

CREATE TYPE SSN
FROM varchar(11) NOT NULL ;

CREATE TYPE SSN
FROM varchar(11) NOT NULL ;

B.Bir kullanıcı tanımlı türü oluşturma

Aşağıdaki örnek, bir tür oluşturur Utf8Stringsınıf başvuran utf8string derleme utf8string. Derleme türü oluşturmadan önce utf8stringyerel veritabanında kayıtlı.

CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String 
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO

CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String 
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO

C.Kullanıcı tanımlı tablo türü oluşturma

Aşağıdaki örnek, iki sütunlu bir tablo kullanıcı tanımlı türü oluşturur. Oluşturmak tablo değerli parametreleri hakkında daha fazla bilgi için bkz: Tablo Valued Parametreler (veritabanı altyapısı) kullanma.

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

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

Ayrıca bkz.

Başvuru

Derleme (Transact-sql) oluştur

TYPE (Transact-sql) bırak

eventdata (Transact-sql)