对用户定义类型执行操作

更新日期: 2006 年 4 月 14 日

您可以对用户定义类型的实例执行各种操作,这些操作包括:

  • 调用方法或检索用户定义类型的属性。
  • 执行数据类型转换。
  • 将用户定义类型值返回到 SQL 客户端。
  • 使用 ORDER BY 子句。
  • 为用户定义类型列创建索引。
  • 创建计算列。

调用方法或检索用户定义类型的属性

您可以在能够使用标量表达式的任何位置调用方法或检索用户定义类型的属性。您必须对该类型具有 EXECUTE 权限。这将执行在 UPDATE 语句外部更改数据状态的方法,但由于查询中不允许可变方法,所以更改将被忽略。

通过用户定义类型方法返回的字符串将采用创建用户定义类型所用数据库的排序规则,而不考虑当前数据库。

ms187630.Caution(zh-cn,SQL.90).gif注意:
SELECT 语句中使用的方法和属性不能有负面影响。如果 SELECT 语句中使用的方法有负面影响,结果将是不确定的。
ms187630.Caution(zh-cn,SQL.90).gif注意:
当对通过其创建计算列的用户定义类型进行方法或属性调用并且调用发生在对计算列执行的某个操作的上下文中时,将不会检查对该类型的 EXECUTE 权限,而是在创建计算列时检查权限。

调用方法或检索用户定义类型的属性

ms187630.note(zh-cn,SQL.90).gif注意:
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 客户端

将用户定义类型的列或表达式作为 SELECT 或 FETCH 语句的结果返回到 SQL 客户端时,客户端 API 访问列的方式取决于客户端 API 是托管 API (ADO.NET) 还是非托管 API(ODBC 或 OLE DB)。如果客户端使用 ADO.NET,则此客户端可通过对 SqlDataReader 类使用 GetValue 方法,将类型实例作为二进制值或对象进行检索。如果客户端使用 OLE DB,则此客户端将用户定义类型值作为二进制值接收。如果客户端使用 ODBC,则此客户端将用户定义类型值仅作为二进制值接收。

对用户定义类型使用 ORDER BY、GROUP BY 和 PARTITION BY 子句

如果用户定义类型支持二进制排序,则可以对其执行 ORDER BY、GROUP BY 和 PARTITION BY 操作。如果在类型的 SqlUserDefinedType 属性(指定为类型定义的一部分)中将 IsByteOrdered 标志设置为 true,则此类型为二进制排序。此标志指明,类型的二进制表示形式在语义上是该类型的正确顺序。

为用户定义类型列创建索引

如果用户定义类型支持二进制排序,则可为该类型列创建索引。您还可以为被定义为用户定义类型列的方法调用的计算列创建索引,只要方法被标记为确定性方法。有关详细信息,请参阅 CLR User-Defined Types

请参阅

概念

使用 CLR 用户定义类型

其他资源

CLR User-Defined Types

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2006 年 4 月 14 日

新增内容:
  • 添加了有关 SQL Server 2005 Service Pack 1 中以下行为更改的信息:通过用户定义类型方法返回的字符串将采用创建用户定义类型所用数据库的排序规则,而不考虑当前数据库。
    在 SQL Server 2005 的早期版本中,通过用户定义类型方法返回的字符串将采用当前数据库的排序规则。