CREATE TYPE (Transact-SQL)
更新: 2006 年 4 月 14 日
在 SQL Server 2005 的執行個體中建立別名資料類型或使用者自訂類型。別名資料類型的實作是以 SQL Server 原生系統類型為基礎。使用者自訂類型是利用 Microsoft .NET Framework Common Language Runtime (CLR) 中之組件的類別來實作的。若要讓 SQL Server 2005 將使用者自訂類型繫結到它的實作,必須先在 SQL Server 中利用 CREATE ASSEMBLY 來註冊內含該類別之實作的 CLR 組件。
附註: |
---|
在 SQL Server 中,依預設,執行 CLR 程式碼的功能是關閉。您可以建立、修改及卸除參考 Managed 程式碼模組的資料庫物件,但除非您利用 sp_configure 來啟用 clr enabled 選項,否則,這些參考就不會在 SQL Server 中執行。 |
語法
CREATE TYPE [ schema_name. ] type_name
{
FROM base_type
[ ( precision [ , scale ] ) ]
[ NULL | NOT NULL ]
| EXTERNAL NAME assembly_name [ .class_name ]
} [ ; ]
引數
- schema_name
這是別名資料類型或使用者自訂類型所屬的結構描述名稱。
- type_name
這是別名資料類型或使用者自訂類型的名稱。類型名稱必須符合識別碼的規則。
base_type
這是 SQL Server 提供的資料類型,別名資料類型以該資料類型為基礎。base_type 是 sysname,沒有預設值,它可以是下列值之一:bigint
binary(n)
bit
char(n)
datetime
decimal
float
image
int
money
nchar(n)
ntext
numeric
nvarchar(n | max)
real
smalldatetime
smallint
smallmoney
sql_variant
text
tinyint
uniqueidentifier
varbinary(n | max)
varchar(n | max)
base_type 也可以是任何資料類型的同義字,而這些同義字對應至這些系統資料類型之一。
- precision
如果是 decimal 或 numeric,這是一個非負數整數,它指出可儲存的最大十進位數總數,小數點左右兩側都包括在內。如需詳細資訊,請參閱<decimal 和 numeric (Transact-SQL)>。
- scale
如果是 decimal 或 numeric,這是一個非負數整數,它指出小數點右側所能儲存的最大十進位數,且它必須小於或等於有效位數。如需詳細資訊,請參閱<decimal 和 numeric (Transact-SQL)>。
- NULL | NOT NULL
指定類型可否保留 Null 值。若未指定,NULL 是預設值。
- assembly_name
指定 SQL Server 組件,來參考 Common Language Runtime 中之使用者自訂類型的實作。assembly_name 應符合目前資料庫之 SQL Server 中的現有組件。
- **[.**class_name ]
指定組件內實作使用者自訂類型的類別。class_name 必須是有效的識別碼,且必須以組件中的類別存在,而組件必須具有組件可見性。不論資料庫定序為何,class_name 都有區分大小寫,且必須完全符合相對應組件中的類別名稱。如果用來撰寫類別的程式設計語言使用命名空間概念 (如 C#),類別名稱可以是一個以方括號 ([]) 括住之符合命名空間資格的名稱。如果未指定 class_name,則 SQL Server 會假設它與 type_name 相同。
備註
使用 CREATE TYPE 來建立 CLR 使用者自訂類型時,資料庫相容性必須是 90。
assembly_name 中參考的組件類別及其方法,應符合在 SQL Server 中實作使用者自訂類型的所有需求。如需有關這些需求的詳細資訊,請參閱<CLR User-Defined Types>。
其他考量包括以下各項:
- 類別可以有多載的方法,但只能從 Managed 程式碼內 (不能從 Transact-SQL 內) 呼叫這些方法。
- 如果 assembly_name 是 SAFE 或 EXTERNAL_ACCESS,任何靜態成員都必須宣告為 const 或 readonly。
在資料庫內,只能有一個依照已從 CLR 上載至 SQL Server 中之任何指定類型來註冊的使用者自訂類型。如果使用者自訂類型建立在某 CLR 類型上,而針對該 CLR 類型,在資料庫中已存在使用者自訂類型,則 CREATE TYPE 會因錯誤而失敗。如果 CLR 類型可以對應至多個使用者自訂類型,就需要利用這項限制來避免 SQL 類型解析期間的模稜兩可。
如果類型中有任何 mutator 方法沒有傳回空值,CREATE TYPE 陳述式就不執行。
若要修改使用者自訂類型,您必須利用 DROP TYPE 陳述式卸除該類型,然後重新建立它。
跟利用 sp_addtype 建立的使用者自訂類型不一樣,public 資料庫角色不會在利用 CREATE TYPE 建立的類型上自動被授與 REFERENCES 權限。這個權限必須另外授與。
權限
需要在目前資料庫中的 CREATE TYPE 權限,以及在 schema_name 上的 ALTER 權限。如果未指定 schema_name,則套用用來判斷目前使用者之結構描述的預設名稱解析規則。如果指定了 assembly_name,使用者必須擁有該組件,或必須有在該組件上的 REFERENCES 權限。
範例
A. 根據 varchar 資料類型建立別名資料類型
下列範例根據系統提供的 varchar
資料類型建立別名資料類型。
CREATE TYPE SSN
FROM varchar(11) NOT NULL ;
B. 建立使用者自訂類型
下列範例建立 Utf8String
類型,它參考 utf8string
組件中的 utf8string
類別。建立該類型之前,必須先在本機資料庫中註冊 utf8string
組件。
CREATE ASSEMBLY utf8string
FROM '\\ComputerName\utf8string\utf8string.dll' ;
GO
CREATE TYPE Utf8String
EXTERNAL NAME utf8string.[Microsoft.Samples.SqlServer.utf8string] ;
GO
請參閱
參考
CREATE ASSEMBLY (Transact-SQL)
DROP TYPE (Transact-SQL)
EVENTDATA (Transact-SQL)
其他資源
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|