對使用者自訂類型執行作業

您可以在使用者自訂類型的執行個體上執行多種作業。這些作業包括:

  • 叫用使用者自訂類型的方法或擷取使用者自訂類型的屬性。

  • 執行資料類型轉換。

  • 將使用者自訂類型的值傳回至 SQL 用戶端。

  • 使用 ORDER BY 子句。

  • 在使用者自訂類型資料行上建立索引。

  • 建立計算資料行。

叫用使用者自訂類型的方法或擷取使用者自訂類型的屬性

您可以在任何會出現純量運算式的地方,叫用使用者自訂類型的方法或擷取使用者自訂類型的屬性。您必須對該類型具有 EXECUTE 權限。會在 UPDATE 陳述式之外變更資料狀態的方法仍可執行;但其變更都會被忽略,因為查詢中不允許可變動方法。

不論目前的資料庫為何,使用者自訂類型方法所傳回的字串,都會採用此使用者自訂類型建立位置的資料庫定序。

警告注意事項警告

用於 SELECT 陳述式中的方法和屬性絕不能有副作用。如果 SELECT 陳述式使用的方法有副作用,結果將不具有決定性。

警告注意事項警告

如果對建立了計算資料行的使用者自訂類型叫用方法或屬性,而且引動過程發生在計算資料行的作業內容中,則不會檢查該類型的 EXECUTE 權限。反而會是在建立計算資料行時檢查權限。

若要叫用使用者自訂類型的方法或擷取使用者自訂類型的屬性

[!附註]

SQL Server Management Studio 會傳回二進位表示法的使用者自訂類型值。若要以字串或 XML 格式傳回使用者自訂類型的值,請使用 CAST 或 CONVERT。

對使用者自訂類型執行資料類型轉換

您可以對使用者自訂類型執行隱含轉換和明確轉換,如下表摘要所示。

 

轉換成:

使用者自訂類型

二進位編碼

nvarchar

xml

從:

使用者自訂類型

 

明確

明確

隱含

二進位編碼

隱含

 

 

 

nvarchar

隱含

 

 

 

xml

隱含

 

 

 

下列範例將使用者自訂類型 ComplexNumber 的執行個體明確轉換成 xml,並對其叫用 XQuery 運算式。

DECLARE @c ComplexNumber
SET @c = CONVERT(ComplexNumber, '(1,2i)')
SELECT CAST(@c AS xml).query('//Real/text()')

下列範例則會將 xml 資料隱含轉換成使用者自訂類型 ComplexNumber 的執行個體。

DECLARE @x xml, @u ComplexNumber
SET @x = '<ComplexNumber><Real>100</Real><Imaginary>4</Imaginary></ComplexNumber>'
SET @u = @x -- implicit convert
SELECT @u.ToString()

如需詳細資訊,請參閱<CAST 和 CONVERT (Transact-SQL)>。

將使用者自訂類型的值傳回至 SQL 用戶端

當使用者自訂類型的資料行或運算式傳回至 SQL 用戶端,做為 SELECT 或 FETCH 陳述式的結果時,將視用戶端 API 是 Managed API (ADO.NET) 或 Unmanaged API (ODBC 或 OLE DB),決定用戶端 API 存取資料行的方式。如果用戶端使用 ADO.NET,用戶端可以使用 SqlDataReader 類別的 GetValue 方法,以二進位值擷取此類型的執行個體,或以物件來擷取此執行個體。如果用戶端使用 OLE DB,用戶端將以二進位值接收使用者自訂類型的值。如果用戶端使用 ODBC,用戶端只能以二進位值接收使用者自訂類型的值。

對使用者自訂類型使用 ORDER BY、GROUP BY 和 PARTITION BY 子句

如果使用者自訂類型支援二進位排序,您便能對該類型執行 ORDER BY、GROUP BY 和 PARTITION BY 作業。如果在指定為類型定義之一部份的 SqlUserDefinedType 屬性中,IsByteOrdered 旗標設為 True,該類型便是二進位排序。此旗標指出該類型的二進位表示法,在語意上是正確的排序。

在使用者自訂類型資料行上建立索引

如果使用者自訂類型支援二進位排序,您便可以在該類型資料行上建立索引。對使用者自訂類型資料行叫用方法而定義出來的計算資料行,只要其方法是標示為決定性,便也可以在這些資料行上建立索引。如需詳細資訊,請參閱<CLR 使用者定義型別>。