托管 UDT 使您能够扩展 SQL Server 的类型系统
来源:中文MSDN 作者: 出处:综艺读书 2006-02-08·SQL Server SQL语句导入导出大全
·列出 SQL Server 数据库中所有的存储过程
·SQL Server SQL语句调优技巧
·SQL Server 事务日志
·从SQL SERVER 向ORACLE 8迁移的技术实现
·重建索引提高SQL Server性能
·SQL Server 数据库管理常用的SQL和T-SQL
·SQL Server 中死锁产生的原因及解决办法
·Asp.Net(C#)+Sql Server三层架构下数据存
本文基于 Microsoft SQL Server 代号“Yukon”的 Beta 1 版本,文中所有信息都有可能发生变化。
下载本文的代码:UDTsinYukon.exe (112KB)
注:本文是在产品投放生产之前编写的,因此,我们无法保证此处包含的任何细节都与在交付使用的产品中发现的细节完全一致。文中信息描述的是本文发布之时的产品,仅供规划之用。这些信息可在任何时候更改,恕不预先通知。
![]() |
不透明或抽象类型 |
![]() |
创建程序集 |
![]() |
类属性 |
![]() |
比较 UDT 的值 |
![]() |
为空性 |
![]() |
支持的转换 |
![]() |
其他要求 |
![]() |
在 SQL Server 中使用 UDT 创建程序集 |
![]() |
创建类型 |
![]() |
使用 UDT |
![]() |
删除和更改 UDT 以及程序集 |
![]() |
小结 |
用户定义类型 (UDT) 是 SQL Server? 下一个版本(代号“Yukon”)中新的公共语言运行库 (CLR) 的集成功能之一。Yukon 中的 UDT 标志着自 SQL Server 以前版本以来一个显著的进步。例如,SQL Server 2000 支持别名类型,可以为用户提供一种重新定义本机类型的简单方法。别名类型是使用现有数据类型创建的,现有数据类型在多个位置(表、过程等)以相同的方式定义。例如,一个邮政编码可能在多个表中使用,并作为多个存储过程中的一个参数。可以用如下方法创建一个名为 ZIP 的类型:
EXEC sp_addtype ZIP, 'CHAR(5)', 'NOT NULL'
接下来便可以在任何需要邮政编码的地方使用 ZIP,而不是 char(5) NOT NULL,并且也不必担心与同样存储邮政编码的其他表中的其他字段保持一致的问题。注意 ZIP 上有一个附加的约束 — NOT NULL。这一约束强制字段必须有一个值,因此使用该类型将不允许空值。您可以创建规则和默认对象并将它们绑定到别名类型,从而进一步地实施和维护数据完整性。例如,可以创建一个只允许数字值的规则并将其绑定到 ZIP 类型。这一技术有强大的设计和实现优势,例如更有组织的以及更一致的数据结构将产生更一致的数据。
在 Yukon 中,系统存储过程 sp_addtype 被新的数据描述语言 (DDL) 语法 CREATE TYPE 所替代。前面的例子可以写成下面这样:
CREATE TYPE ZIP FROM char(5) NOT NULL
Yukon UDT 允许用户编写 Microsoft .NET 框架类,这些框架类能够在 SQL 语言类型系统中注册为标量类型。这使得 Yukon UDT 与任何其他 SQL 本机类型地位相同。Yukon UDT 被编译成能够在数据库内部注册并存储的 .NET 程序集。一旦程序集存储到数据库中,用户能够使用 CREATE TYPE 语句的扩展将该程序集中的类定义为类型,相关内容将在本文的后面详细阐述。要让一个 .NET 框架类作为 SQL 类型系统中的类型,它必须实现一个协定 — 一组接口和方法,在 CREATE TYPE 时由 Yukon 进行验证。定义和实现 .NET 程序集中定义的 UDT 能够进行更为灵活的类型设计,不仅可以存储结构化的类型,而且还允许自定义方法、属性以及数据的序列化。
该功能有几个优点。它是扩展数据库标量类型系统的一个强有力的方法。这一可扩展性机制非常健壮,您可以使用它在数据库中存储类型的实例,以及在许多上下文中运行它们(作为变量、存储过程的参数以及函数的值),并在几乎所有能够使用本机类型的地方使用它们,包括诸如复制、大量复制、分布式查询和跨数据库操作之类的高级场景中。另外,您可以将定义在类型上的行为作为查询的一部分来调用,甚至能对调用这种行为的结果建立索引以加速查询的执行。
UDT 的另一个优点是封装。类型的状态以及在类型上的操作常常可作为一个单元来使用。类型上的方法控制对状态的访问,使您能够自由地使用熟悉的 OO 范例来考虑类型,并产生其他应用程序开发人员能够使用的可重用组件。在本文的后面,我将讨论用 .NET 代码实现 UDT 的各种方面,以及在 Yukon 中使用结果类作为数据类型的问题。
不透明或抽象类型
Yukon UDT 可以作为不透明或者抽象数据类型,因为类型的使用者不了解类型执行的内部细节。他们仅通过类型的公共接口与类型进行交互。这一定义 UDT 的新技术为数据库设计开启了新的大门。既然 UDT 可以是具有属性、方法等的托管类型,那么您现在可以创建类型来代表大量以前在 SQL Server 中没有的数据结构。使用 UDT,您能够创建代表地理空间(位置和地图类型的数据)、自定义二进制数据、编码数据以及加密数据的数据结构。
您可以使用实现 UDT 协定的托管代码来创建一个类,从而扩展 SQL 类型系统。接下来使用 CREATE ASSEMBLY 语句将包含 UDT 的已编译程序集加载到服务器上的数据库中,并使用公开托管代码 UDT 的 CREATE TYPE 语句在数据库中创建类型。
这时,您可以在表定义或变量声明中使用该类型。让我们从检查 UDT 托管代码需求开始。
·系统安全设置 (18678篇文章)
·系统安装手册 (16366篇文章)
·系统备份专题 (13499篇文章)
·SQL Server 数据处理专题 (1439篇文章)
·SQL Server 索引和查询专题 (2633篇文章)
·SQL Server (1402篇文章)
·系统维护手册 (13037篇文章)
·SQL Server (1403篇文章)
·轻松维护SQL Server 2005数据库 (0次浏览)
·数据库性能之数据库集群概念 (0次浏览)
·SQL Server根据访问历史日志自动分析并提供优 (0次浏览)
·数据库的安全性和异构数据库间的互操作 (0次浏览)
·如何优化数据库的数据查询 (0次浏览)
·如何应用SQL Server DBCC避免堵塞 (0次浏览)
·SQL Server 查询分析器快捷键集合 (0次浏览)
·用SQL Server 2005同义字缩短开发时间 (0次浏览)
·教你如何在SQL Server计算列和平均值 (38次浏览)
·SQL Server 2005 - 实作CLR存储过程 (35次浏览)
·轻松维护SQL Server 2005数据库 (0次浏览)
·数据库性能之数据库集群概念 (0次浏览)
·SQL Server根据访问历史日志自动分析并提供优 (0次浏览)
·数据库的安全性和异构数据库间的互操作 (0次浏览)
·如何优化数据库的数据查询 (0次浏览)
·如何应用SQL Server DBCC避免堵塞 (0次浏览)
·SQL Server 查询分析器快捷键集合 (0次浏览)
·动态创建SQL Server数据库表存储过程 (817次浏览)
·SQL Server如何访问sybase数据库的表 (263次浏览)
·运行SQL Server的计算机间移动数据库 (206次浏览)
·MS-SQL开发常用汇总和t-sql技巧集锦 (174次浏览)
·快速清除SQLServer日志的两种方法 (151次浏览)
·解析SQL Server数据在不同数据库中的应用 (46次浏览)
·教你如何在SQL Server计算列和平均值 (38次浏览)
·SQL Server 2005 - 实作CLR存储过程 (35次浏览)
·SQL Server 查询分析器快捷键集合 (0次浏览)
·轻松维护SQL Server 2005数据库 06-15
·数据库性能之数据库集群概念 06-15
·SQL Server根据访问历史日志自动分析并提供优化策 06-15
·数据库的安全性和异构数据库间的互操作 06-15
·如何优化数据库的数据查询 06-15
·如何应用SQL Server DBCC避免堵塞 06-15
·SQL Server 查询分析器快捷键集合 06-14
·用SQL Server 2005同义字缩短开发时间 06-12
·解析SQL Server数据在不同数据库中的应用 06-06
|
|||
| ·ACDSEE专题教程-下载使用 ·迅雷专题教程-下载使用 ·Windows XP频道 ·Windows Vista频道 ·Windows 2000频道 ·win2003频道 ·Freebsd频道 ·Oracle频道 |
·Linux频道 ·Windows频道 ·邮件服务器专题 ·协议大全 ·数据恢复指南教程 ·FreeBSD使用教程 ·Linux数据库宝典 ·Linux基础知识 |
||
| · 秘密:Vista隐蔽的动态屏保 · 腾讯开发新电子宠物--QQ熊 · 惠普否认2999元PC有价无货 |
· 驱逐Win系统“流氓”文件 · WinXP中获取未使用的IP地址 · 尝试format C:格式化硬盘? |
| · 在DOS下恢复回收站中的文件 · 拯救WinXP崩溃的救命稻草 · Linux系统中超级权限的应用 |
· 搜狗PK谷歌:谁能代言拼... · 昨日重现,一键GHOST轻松.. · 实现Web迅雷在空闲时杀毒 |
| · AVIFile函数制做AVI文件 · VC中链接动态链接库的方法 · 熊猫烧香核心源码(Delphi) |
· DateDiff函数祥解 · JavaScript去除空格的三种 · js效果 图片加载进度实时.. |
| · SQL Server数据库优化方案 · Oracle的初学者入门心得 · JSP连接Mysql数据库 |
· Photoshop为美女做艺术处理 · 用Freehand创建发光字特效 · 设计自己的个性QQ动态表情 |





