對使用者自訂類型執行作業
您可以在使用者自訂類型的執行個體上執行多種作業。這些作業包括:
叫用使用者自訂類型的方法或擷取使用者自訂類型的屬性。
執行資料類型轉換。
將使用者自訂類型的值傳回至 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 使用者定義型別>。