托管 UDT 使您能够扩展 SQL Server 的类型系统
本文基于 Microsoft SQL Server 代号“Yukon”的 Beta 1 版本,文中所有信息都有可能发生变化。www.iTbulo.comR9jWYOn
下载本文的代码:UDTsinYukon.exe (112KB)www.iTbulo.comR9jWYOn
注:本文是在产品投放生产之前编写的,因此,我们无法保证此处包含的任何细节都与在交付使用的产品中发现的细节完全一致。文中信息描述的是本文发布之时的产品,仅供规划之用。这些信息可在任何时候更改,恕不预先通知。www.iTbulo.comR9jWYOn
不透明或抽象类型
创建程序集
类属性
比较 UDT 的值
为空性
支持的转换
其他要求
在 SQL Server 中使用 UDT 创建程序集
创建类型
使用 UDT
删除和更改 UDT 以及程序集
小结
www.iTbulo.comR9jWYOn
用户定义类型 (UDT) 是 SQL Server™ 下一个版本(代号“Yukon”)中新的公共语言运行库 (CLR) 的集成功能之一。Yukon 中的 UDT 标志着自 SQL Server 以前版本以来一个显著的进步。例如,SQL Server 2000 支持别名类型,可以为用户提供一种重新定义本机类型的简单方法。别名类型是使用现有数据类型创建的,现有数据类型在多个位置(表、过程等)以相同的方式定义。例如,一个邮政编码可能在多个表中使用,并作为多个存储过程中的一个参数。可以用如下方法创建一个名为 ZIP 的类型:www.iTbulo.comR9jWYOn
EXEC sp_addtype ZIP, 'CHAR(5)', 'NOT NULL'接下来便可以在任何需要邮政编码的地方使用 ZIP,而不是 char(5) NOT NULL,并且也不必担心与同样存储邮政编码的其他表中的其他字段保持一致的问题。注意 ZIP 上有一个附加的约束 — NOT NULL。这一约束强制字段必须有一个值,因此使用该类型将不允许空值。您可以创建规则和默认对象并将它们绑定到别名类型,从而进一步地实施和维护数据完整性。例如,可以创建一个只允许数字值的规则并将其绑定到 ZIP 类型。这一技术有强大的设计和实现优势,例如更有组织的以及更一致的数据结构将产生更一致的数据。www.iTbulo.comR9jWYOn
在 Yukon 中,系统存储过程 sp_addtype 被新的数据描述语言 (DDL) 语法 CREATE TYPE 所替代。前面的例子可以写成下面这样:www.iTbulo.comR9jWYOn
CREATE TYPE ZIP FROM char(5) NOT NULLYukon UDT 允许用户编写 Microsoft .NET 框架类,这些框架类能够在 SQL 语言类型系统中注册为标量类型。这使得 Yukon UDT 与任何其他 SQL 本机类型地位相同。Yukon UDT 被编译成能够在数据库内部注册并存储的 .NET 程序集。一旦程序集存储到数据库中,用户能够使用 CREATE TYPE 语句的扩展将该程序集中的类定义为类型,相关内容将在本文的后面详细阐述。要让一个 .NET 框架类作为 SQL 类型系统中的类型,它必须实现一个协定 — 一组接口和方法,在 CREATE TYPE 时由 Yukon 进行验证。定义和实现 .NET 程序集中定义的 UDT 能够进行更为灵活的类型设计,不仅可以存储结构化的类型,而且还允许自定义方法、属性以及数据的序列化。www.iTbulo.comR9jWYOn
该功能有几个优点。它是扩展数据库标量类型系统的一个强有力的方法。这一可扩展性机制非常健壮,您可以使用它在数据库中存储类型的实例,以及在许多上下文中运行它们(作为变量、存储过程的参数以及函数的值),并在几乎所有能够使用本机类型的地方使用它们,包括诸如复制、大量复制、分布式查询和跨数据库操作之类的高级场景中。另外,您可以将定义在类型上的行为作为查询的一部分来调用,甚至能对调用这种行为的结果建立索引以加速查询的执行。www.iTbulo.comR9jWYOn![]()
文章评论
共有 0人发表了评论 查看完整内容