在當(dāng)前數(shù)據(jù)庫中創(chuàng)建別名數(shù)據(jù)類型或用戶定義類型淘正。別名數(shù)據(jù)類型的實現(xiàn)基于 SQL Server 本機系統(tǒng)類型。用戶定義類型通過 Microsoft .NET Framework 公共語言運行時 (CLR) 中的程序集的類來實現(xiàn)等限。若要將用戶定義類型綁定到其實現(xiàn)有巧,必須首先使用**CREATE ASSEMBLY **在 SQL Server 中注冊包含該類型實現(xiàn)的 CLR 程序集释漆。
語法
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 ] ]
<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 }
}
- type_name:別名數(shù)據(jù)類型或用戶定義類型的名稱。
- base_type:別名數(shù)據(jù)類型所基于的數(shù)據(jù)類型篮迎,由 SQL Server 提供男图,無默認(rèn)值。
- precision:對于 decimal 或 numeric甜橱,其值為非負整數(shù)逊笆,指示可保留的十進制數(shù)字位數(shù)的最大值,包括小數(shù)點左邊和右邊的數(shù)字岂傲。
- scale:對于 decimal 或 numeric难裆,其值為非負整數(shù),指示十進制數(shù)字的小數(shù)點右邊最多可保留多少位譬胎,它必須小于或等于精度值差牛。
- NULL | NOT NULL:指定此類型是否可容納空值。如果未指定堰乔,則默認(rèn)值為 NULL偏化。
- assembly_name:指定可在公共語言運行庫中引用用戶定義類型的實現(xiàn)的 SQL Server 程序集。
- [.class_name ]:指定實現(xiàn)用戶定義類型的程序集內(nèi)的類镐侯。class_name 必須是有效的標(biāo)識符侦讨,而且必須在具有程序集可見性的程序集中作為類存在驶冒。class_name 區(qū)分大小寫。
- <column_definition>:定義用戶定義表類型的列韵卤。
- <data type>:定義用戶定義表類型的列中的數(shù)據(jù)類型骗污。
- <column_constraint>:定義用戶定義表類型的列約束。支持的約束包括 PRIMARY KEY沈条、UNIQUE 和 CHECK需忿。
- <computed_column_definition>:將計算列表達式定義為用戶定義表類型中的列。
- 用作 CHECK蜡歹、FOREIGN KEY 或 NOT NULL 約束的計算列必須標(biāo)記為 PERSISTED屋厘。如果計算列的值由具有確定性的表達式定義,并且索引列中允許使用計算結(jié)果的數(shù)據(jù)類型月而,則可將該列用作索引中的鍵列汗洒,或者用作 PRIMARY KEY 或 UNIQUE 約束的一部分。
例如父款,如果表中含有整數(shù)列 a 和 b溢谤,則可以對計算列 a + b 創(chuàng)建索引,但不能對計算列 a + DATEPART(dd, GETDATE()) 創(chuàng)建索引憨攒,因為在后續(xù)調(diào)用中世杀,其值可能發(fā)生改變。 - 在用戶定義表類型中浓恶,計算列的主鍵必須是 PERSISTED 和 NOT NULL玫坛。
- 計算列不能作為 INSERT 或 UPDATE 語句的目標(biāo)。
- <table_constraint>:定義用戶定義表類型的表約束包晰。支持的約束包括 PRIMARY KEY湿镀、UNIQUE 和 CHECK。
- <index_option>:指定對唯一聚集索引或唯一非聚集索引執(zhí)行多行插入操作時出現(xiàn)重復(fù)鍵值的錯誤響應(yīng)伐憾。
示例
A. 基于 varchar 數(shù)據(jù)類型創(chuàng)建別名類型
CREATE TYPE SSN
FROM varchar(11) NOT NULL ;
B勉痴、創(chuàng)建用戶定義表類型
CREATE TYPE LocationTableType AS TABLE
( LocationName VARCHAR(50),
CostRate INT
)
GO
C、 創(chuàng)建用戶定義類型
??以下示例創(chuàng)建類型Utf8String树肃,該類型在程序集utf8string中引用類 utf8string 蒸矛。創(chuàng)建類型之前,應(yīng)在本地數(shù)據(jù)庫中注冊程序集 utf8string胸嘴。
CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO