Tür (Transact-SQL) oluştur
Bir diğer ad veri türü veya kullanıcı tanımlı tür geçerli veritabanında oluşturur.Uygulamasında bir diğer ad veri türü, temel aldığı bir SQL Server Yerel Sistem türü.Bir kullanıcı tanımlı tür derleme sınıf üzerinden uygulanan Microsoft .NET Framework ortak dil çalışma zamanı (clr).Uygulaması için bir kullanıcı tanımlı tür bağlamak için uygulama türü içeren clr derleme ilk kayıtlı olmalıdır SQL Server kullanarak DERLEMESİ oluşturmak.
Not
clr kod çalıştırma yeteneği varsayılan olarak kapalı SQL Server.Oluşturabilir, değiştirebilir ve yönetilen kod modülleri başvuru veritabanı nesnelerini bırakın, ancak bu başvuruları değil yürütmek olur SQL Server sürece clr seçeneği etkin kullanarak etkin sp_configure.
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üraddır.Türü adları için kuralları ile uymak gerekir tanımlayıcıları.base_type
İş SQL Server diğer ad veri türü temel veri türü sağlanan. base_type olan 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)
taban_türü da bu sistem veri türlerinden birini eşleştiren herhangi veri türü eş anlamlı olabilir.
precision
İçin decimal veya numeric, toplam sayısı, saklanabilir, solundaki ve sağındaki ondalık basamak gösterir negatif olmayan tamsayıondalık noktanın.Daha fazla bilgi için, bkz. ondalık ve sayısal (Transact-SQL).scale
İçin decimal veya numeric, ondalık noktanın sağındaki saklanabilir ondalık basamak sayısı gösterir negatif olmayan tamsayı ve precision eşit veya bundan küçük olmalıdırDaha fazla bilgi için, bkz. ondalık ve sayısal (Transact-SQL).NULL | NOT NULL
Türü null değer basılı olup olmadığını belirtir.Aksi takdirde belirtilen, null varsayılan değerdir.assembly_name
Belirtir SQL Server derleme başvuran uygulaması kullanıcı tanımlı tür ortak dil çalışma zamanı. assembly_name , varolan bir derleme aynı olmalıdır SQL Server geçerli bir veritabanı.[.class_name ]
kullanıcı tanımlı türuygulayan derleme içindeki sınıf belirtir.class_nameGeçerli bir tanımlayıcı olmalıdır ve derleme sınıf olarak derleme görünürlüğü ile bulunmalıdır.class_namedurum-duyarlı veritabanı harmanlamave gereken ne olursa olsun tam olarak eşleşen sınıf adı ilgili derleme.Sınıf adı köşeli parantez içine alınmış bir ad alanıyla nitelenmiş ad olabilir ([]) sınıf yazmak için kullanılan programlama dili C# gibi bir ad alaný kavramýný kullanıyorsa.class_name Belirtilmezse, SQL Server ile aynı olduğu varsayılır type_name.<column_definition>
Kullanıcı tanımlı tablo türü sütunları tanımlar.Sütunları hakkında daha fazla bilgi için bkz: Ekleme ve sütunları silme.<veri türü>
Kullanıcı tanımlı tablo türü bir sütun 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. CREATE TABLE (Transact-SQL).<column_constraint>
Kullanıcı tanımlı tablo türü için sütun kısıtlamaları tanımlar.BİRİNCİL anahtar, benzersiz ve onay desteklenen kısıtlamaları içerir.Sınırlamalar hakkında daha fazla bilgi için bkz: Veri tutarlılığı zorlanarak.Tablolar hakkında daha fazla bilgi için, bkz. CREATE TABLE (Transact-SQL).<computed_column_definition>
Hesaplanan sütunifade tablo kullanıcı tanımlı türü sütun olarak tanımlar. Hesaplanan sütunlar hakkında daha fazla bilgi için bkz: Hesaplanan sütunlar.Tablolar hakkında daha fazla bilgi için, bkz. CREATE TABLE (Transact-SQL).<table_constraint>
Kullanıcı tanımlı tablo türü bir tablo kısıtlaması tanımlar.BİRİNCİL anahtar, benzersiz ve onay desteklenen kısıtlamaları içerir.tablo kısıtlamaları hakkında daha fazla bilgi için bkz: Kısıtlamaları.<index_option>
Birden çok satırda anahtar değerleri çoğaltmak için hata yanıt Ekle benzersiz kümelenmiş veya benzersiz kümelenmemiş dizinişlemi belirtir.Dizin seçenekleri hakkında daha fazla bilgi için bkz: CREATE INDEX (Transact-SQL).
Açıklamalar
create type CLR kullanıcı tanımlı türüoluşturmak için 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 gereksinimlerini karşılamak SQL Server.Bu gereksinimler hakkında daha fazla bilgi için bkz: clr kullanıcı tanımlı türler.
Dikkat edilecek diğer noktalar şunlardır:
Sınıf yöntemleri aşırı, ancak bu yöntemler yalnızca yönetilen kodiçinde değil, çağrılabilir Transact-SQL.
Herhangi bir statik üye olarak bildirilmelidir const veya salt okunur , assembly_name Güvenli ya da permission_set.
Bir veritabanı içinde olabilir, karşıya belirtilen türlü karşı kayıtlı yalnızca bir kullanıcı tanımlı tür SQL Server clr.create type, kendisi için bir kullanıcı tanımlı tür veritabanında zaten bir clr türü üzerinde bir kullanıcı tanımlı tür oluşturduysanız, bir hata ile başarısız olur.Bu kısıtlama, clr türü için birden fazla kullanıcı tanımlı türeşlenebilir, SQL türü çözümlemesi sırasında belirsizlik önlemek için gereklidir.
Yazın herhangi bir mutator yöntem değil dönmek void, create type deyim yürütmekyapar.
Bir kullanıcı tanımlı türdeğiştirmek için type type drop deyim kullanarak bırakın ve sonra yeniden oluşturun.
Kullanılarak oluşturulan kullanıcı tanımlı türler aksine sp_addtype, ortak veritabanı rolü değil otomatik olarak verilen başvurular izni create type kullanılarak oluşturulan türleri.Bu ayrı ayrı izni verilmesi gerekir.
Kullanıcı tanımlı tablo türleri'nde, içinde kullanılan kullanıcı tanımlı türler yapısal column_name <veri türü> tablo türü tanımlanmıştır veritabanı şemasıkapsam parçasıdır. Yapılandırılmış kullanıcı tanımlı türler kapsam farklı bir veritabanı içinde erişim için iki bölümü adları kullanın.
Kullanıcı tanımlı tablo türlerini hesaplanmış sütunları birincil anahtar kalıcı ve not null.
İzinler
On, geçerli veritabanında türü oluşturma izni ve alter izni gerektirir schema_name.schema_name Belirtilmezse, geçerli kullanıcı için şema belirlemek için varsayılan ad çözümleme kurallarını uygula.assembly_name Belirtilmişse, kullanıcı it. başvurular izni olan veya derleme sahibi
Örnekler
A.Varchar veri türüne bağlı olarak bir diğer ad türü oluşturma
Aşağıdaki örnek, sistem tarafından sağlanan üzerinde temel alan bir diğer ad türü oluşturur varchar veri türü.
CREATE TYPE SSN
FROM varchar(11) NOT NULL ;
B.Bir kullanıcı tanımlı türoluşturma
Aşağıdaki örnek, bir tür oluşturur Utf8String sınıf başvuru utf8string derleme utf8string.derlemetürü oluşturmadan önceutf8string kayıtlı yerel veritabanı.
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ütunu olan bir tablo kullanıcı tanımlı türü oluşturur.tablooluşturmak hakkında daha fazla bilgi için-valued parametreleri için bkz: Tablo değerli Parametreler (veritabanı altyapısı).
/* Create a user-defined table type */
CREATE TYPE LocationTableType AS TABLE
( LocationName VARCHAR(50)
, CostRate INT )
GO