共用方式為


實作使用者自訂類型

更新: 2006 年 4 月 14 日

本主題將說明如何在 SQL Server 中建立並卸除 Common Language Runtime (CLR) 使用者自訂類型。

建立使用者自訂類型

若要在 SQL Server 中建立使用者自訂類型,必須依序執行下列步驟:

  • 以 Microsoft .NET Framework 支援的語言,將使用者自訂類型定義為類別或結構。如需有關如何在 CLR 中程式設計類型的詳細資訊,請參閱<CLR User-Defined Types>。然後,請使用適當語言編譯器,在 .NET Framework 中編譯類別或結構,以建立組件。
  • 使用 CREATE ASSEMBLY 陳述式在 SQL Server 中登錄組件。如需有關 SQL Server 中組件的詳細資訊,請參閱<組件 (Database Engine)>。
  • 建立參考已註冊組件之類型。
ms179298.note(zh-tw,SQL.90).gif附註:
在 Microsoft Visual Studio 中部署 SQL Server 專案,便會在已指定給專案的資料庫中註冊組件。部署專案時,也會在資料庫中為所有以 SqlUserDefinedType 屬性註解的類別定義建立 CLR 使用者自訂類型。如需詳細資訊,請參閱<Deploying CLR Database Objects>。
ms179298.note(zh-tw,SQL.90).gif附註:
依預設,SQL Server 執行 CLR 程式碼的功能是設為 OFF。您可以建立、修改及卸除參考 Managed 程式碼模組的資料庫物件,但除非您利用 sp_configure 來啟用 clr enabled 選項,否則,這些參考就不會在 SQL Server 中執行。

若要建立、修改或卸除組件

若要建立使用者自訂類型

卸除使用者自訂類型

若要卸除使用者自訂類型

ms179298.note(zh-tw,SQL.90).gif附註:
當使用者自訂類型建立之後,便不可修改,因為變更會使得資料表或索引中的資料失效。若要修改類型,您必須先卸除類型再重新建立,或是使用 WITH UNCHECKED DATA 子句發出 ALTER ASSEMBLY 陳述式。

您要等到使用者自訂類型的所有參考都移除後,才能卸除使用者自訂類型。這些參考包括:

  • 在該類型上定義的資料行。
  • 運算式參考該類型的計算資料行以及 CHECK 條件約束。
  • 運算式定義參考該類型的結構描述繫結檢視和函數。
  • 函數和預存程序的參數。

若要找出與使用者自訂類型相依的資料行

下列範例會擷取在使用者自訂類型 ComplexNumber 上定義之資料行的相關中繼資料。

SELECT * FROM sys.columns 
WHERE user_type_id = TYPE_ID('ComplexNumber');

下列範例會為最低權限使用者擷取在使用者自訂類型 ComplexNumber 上定義之資料行的相關有限中繼資料。

SELECT * FROM sys.column_type_usages 
WHERE user_type_id = TYPE_ID('ComplexNumber');

若要找出與使用者自訂類型相依的計算資料行運算式、CHECK 條件約束運算式及結構描述繫結檢視和函數運算式

下列範例會擷取與使用者自訂類型 ComplexNumber 具有相依性之計算資料行 (及其資料表) 的名稱。

SELECT OBJECT_NAME(object_id) AS object_name,
    COL_NAME(object_id, column_id) AS column_name
FROM sys.sql_dependencies
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
    AND class = 2 
    AND OBJECTPROPERTY(object_id, 'IsTable')=1; 

下列範例會擷取與使用者自訂類型 ComplexNumber 具有相依性之 CHECK 條件約束 (及它們在其上定義的物件) 的名稱。

SELECT SCHEMA_NAME(o.schema_id) AS schema_name,
    OBJECT_NAME(o.parent_object_id) AS table_name,
    OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2 
AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst')=1;

下列範例會擷取定義參考使用者自訂類型 ComplexNumber 之結構描述繫結函數的名稱。

ms179298.note(zh-tw,SQL.90).gif附註:
SQL Server 不會維護使用者自訂類型及它們在預存程序、觸發程序、非結構描述繫結函數或非結構描述繫結檢視主體中用法之間的相依性中繼資料。
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema,
    OBJECT_NAME(o.object_id) AS dependent_object_name,
    o.type_desc AS dependent_object_type,
    d.class_desc AS kind_of_dependency,
    d.referenced_major_id AS referenced_object
FROM sys.sql_dependencies AS d 
JOIN sys.objects AS o
    ON d.object_id = o.object_id
        AND o.type IN ('FN','IF','TF', 'V')
WHERE  d.class = 2
    AND d.referenced_major_id IN (TYPE_ID('ComplexNumber'))
ORDER BY dependent_object_schema, dependent_object_name;

若要找出與使用者自訂類型相依的參數

下列範例會擷取在使用者自訂類型 ComplexNumber 上定義之參數 (及它們所屬的物件) 的名稱。

SELECT OBJECT_NAME(object_id) AS object_name,
    NULL AS procedure_number,
    name AS param_name,
    parameter_id AS param_num,
    TYPE_NAME(p.user_type_id) AS type_name
FROM sys.parameters AS p
WHERE p.user_type_id = TYPE_ID('ComplexNumber')
ORDER BY object_name, procedure_number, param_num;

下列範例會為最低權限使用者擷取在使用者自訂類型 ComplexNumber 上定義之參數的相關有限中繼資料。

SELECT * FROM sys.parameter_type_usages 
WHERE user_type_id = TYPE_ID('ComplexNumber');

請參閱

概念

使用 CLR 使用者自訂類型

其他資源

CLR 可程式性範例

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

新增內容:
  • 新增「卸除使用者自訂類型」一節,其中包含找出使用者自訂類型之相依性的相關資訊。