WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹦绠鹃柍褜鍓氱换娑欐媴閸愬弶鎼愮痪鍓ф嚀閳规垿鎮╃€圭姴顥濋梺姹囧€楅崑鎾诲Φ閸曨垰绠涢柛顐f礃椤庡秹姊虹粙娆惧剳闁哥姵鍔欐俊鐢稿礋椤栨艾鍞ㄩ梺闈浤涙担鎻掍壕闁圭儤顨嗛埛鎺楁煕閺囥劌浜滄い蹇e弮閺屸€崇暆鐎n剛鏆犻柧浼欑到閵嗘帒顫濋悡搴d画缂佹鍨垮缁樻媴缁涘娈┑顔斤公缁犳捇銆佸鎰佹▌濠电姭鍋撳ù锝囩《閺€浠嬫煟濡鍤嬬€规悶鍎辫灃闁绘ê寮堕崯鐐电磼閸屾氨效鐎规洘绮忛ˇ瀵哥棯閹佸仮鐎殿喖鐖煎畷鐓庘槈濡警鐎崇紓鍌欑劍椤ㄥ棗鐣濋幖浣歌摕闁绘棃顥撻弳瀣煟濡も偓閻楀棗鈻撳Δ鍛拺閻犲洠鈧櫕鐏€闂佸搫鎳愭慨鎾偩閻ゎ垬浜归柟鐑樼箖閺呮繈姊洪棃娑氬婵☆偅鐟╅、娆掔疀閺冨倻鐦堥梺姹囧灲濞佳勭閿曞倹鐓曢柕濞垮劤閸╋絾顨ラ悙鏉戝妤犵偞锕㈤、娆撴嚃閳哄骞㈤梻鍌欐祰椤鐣峰Ο鑲╃煋妞ゆ棁锟ユ禍褰掓煙閻戞ɑ灏ù婊冪秺濮婅櫣绱掑Ο铏逛桓闂佹寧娲嶉弲娑滅亱闂佸憡娲﹂崹閬嶅煕閹达附鐓欓柤娴嬫櫅娴犳粌鈹戦垾鐐藉仮闁诡喗顨呴埥澶愬箳閹惧褰囩紓鍌欑贰閸犳牠顢栭崨鎼晣闁稿繒鍘х欢鐐翠繆椤栨粎甯涙繛鍛喘濮婄粯鎷呴悷閭﹀殝缂備浇顕ч崐鍨嚕缂佹ḿ绡€闁搞儯鍔嶅▍鍥⒑缁嬫寧婀扮紒瀣崌瀹曘垽鎮介崨濠勫幗闁瑰吋鐣崹濠氬煀閺囥垺鐓ユ慨妯垮煐閻撶喖鐓崶銉ュ姢缂佸宕电槐鎺旂磼濡偐鐣虹紓浣虹帛缁诲牆鐣峰鈧俊姝岊槺缂佽鲸绻堝缁樻媴缁涘娈愰梺鎼炲妺閸楀啿鐣烽鐐茬骇闁瑰濮靛▓楣冩⒑缂佹ɑ鈷掗柍宄扮墦瀵偊宕掗悙瀵稿幈闂佹娊鏁崑鎾绘煛閸涱喚鎳呮俊鍙夊姇铻i悶娑掑墲閺傗偓闂備胶绮崝鏇炍熸繝鍥у惞闁绘柨鐨濋弨鑺ャ亜閺冨洦顥夐柛鏂诲€濋幗鍫曟倷閻戞ḿ鍘遍梺鍝勬储閸斿本鏅堕鐐寸厱婵炲棗绻掔粻濠氭煛鐏炵晫效鐎规洦鍋婂畷鐔碱敆閳ь剙鈻嶉敐鍥╃=濞达絾褰冩禍鐐節閵忥絾纭炬い鎴濇川缁粯銈i崘鈺冨幍闁诲孩绋掑玻璺ㄧ不濮椻偓閺屻劌鈽夊Ο澶癸絾銇勯妸锝呭姦闁诡喗鐟╅、鏃堝礋椤撴繄绀勯梻鍌欐祰椤曟牠宕伴弽顐ょ濠电姴鍊婚弳锕傛煙椤栫偛浜版俊鑼额嚙閳规垿鍩勯崘銊хシ濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閳哄懏鐓忓璺虹墕閸旀挳鏌涢弬娆炬Ш缂佽鲸鎸婚幏鍛矙鎼存挸浜鹃柛婵勫劤閻挾鎲搁悧鍫濈瑨闁哄绶氶弻鐔煎礈瑜忕敮娑㈡煛閸涱喗鍊愰柡灞诲姂閹倝宕掑☉姗嗕紦 ---闂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏃堟暜閸嬫挾绮☉妯哄箻婵炲樊浜滈悡娑㈡煕濞戝崬骞樻い鏂挎濮婅櫣鎹勯妸銉︾彚闂佺懓鍤栭幏锟�
开发学院数据库MSSQL Server 托管 UDT 使您能够扩展 SQL Server 的类型系统 阅读

托管 UDT 使您能够扩展 SQL Server 的类型系统

 2007-11-11 04:48:09 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹闂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偛顦甸弫鎾绘偐閹绘帞鈧參姊哄Ч鍥х仼闁诲繑鑹鹃悾鐑藉蓟閵夛妇鍘甸梺瑙勵問閸犳牠銆傛總鍛婄厱閹艰揪绱曟牎闂侀潧娲ょ€氫即鐛幒妤€绠f繝闈涘暙娴滈箖鏌i姀鈶跺湱澹曟繝姘厵闁绘劦鍓氶悘杈ㄤ繆閹绘帞澧涚紒缁樼洴瀹曞崬螖閸愬啠鍓濈换娑樼暆婵犱胶鏁栫紓浣介哺閹瑰洤鐣烽幒鎴僵闁瑰吀鐒﹂悗鎼佹⒒娴g儤鍤€闁搞倖鐗犻獮蹇涙晸閿燂拷濠电姷鏁告慨鐑藉极閸涘﹥鍙忔い鎾卞灩缁狀垶鏌涢幇闈涙灈鐎瑰憡绻冮妵鍕箻鐎靛摜鐣奸梺纭咁潐濞茬喎顫忕紒妯肩懝闁逞屽墮宀h儻顦查悡銈夋煏閸繃鍋繛宸簻鎯熼梺瀹犳〃閼冲爼宕濋敃鈧—鍐Χ閸℃鐟愰梺鐓庡暱閻栧ジ宕烘繝鍥у嵆闁靛骏绱曢崢顏堟⒑閹肩偛鍔楅柡鍛⊕缁傛帟顦寸紒杈ㄥ笚濞煎繘鍩℃担閿嬵潟闂備浇妗ㄩ悞锕傚箲閸ヮ剙鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘闂傚倸鍊搁崐鎼佸磹妞嬪孩顐芥慨姗嗗厳缂傛氨鎲稿鍫罕闂備礁婀遍搹搴ㄥ窗閺嶎偆涓嶆い鏍仦閻撱儵鏌i弴鐐测偓鍦偓姘炬嫹  闂傚倸鍊搁崐鎼佸磹閻戣姤鍤勯柤鍝ユ暩娴犳氨绱撻崒娆掑厡缂侇噮鍨堕妴鍐川閺夋垹鍘洪悗骞垮劚椤︻垶宕¢幎鑺ョ厪闊洦娲栨牎闂佽瀵掗崜鐔奉潖閾忓湱纾兼俊顖氭惈椤秴顪冮妶鍡楀闁告鍥х叀濠㈣泛谩閻斿吋鐓ラ悗锝庡厴閸嬫挻绻濆顓涙嫼閻熸粎澧楃敮鎺撶娴煎瓨鐓曢柟鎯ь嚟閳藉鏌嶇紒妯荤叆妞ゎ偅绻堥幊婊呭枈濡顏归梻鍌欑閹诧紕绮欓幋锔哄亼闁哄鍨熼弸鏃堟煛閸愶絽浜剧紓浣虹帛缁嬫挻绂掗敃鍌氱<婵﹩鍓﹂悗鎶芥⒒娴e摜锛嶇紒顕呭灦楠炴垿宕堕鍌氱ウ闁诲函缍嗘禍鏍绩娴犲鐓欓梺顓ㄧ畱婢ь垱銇勯弬鍨偓瑙勭┍婵犲洦鍊锋い蹇撳閸嬫捇寮借濞兼牕鈹戦悩瀹犲闁稿被鍔庨幉姝岀疀濞戞ḿ鐤呴梺鍦檸閸犳寮查幖浣圭叆闁绘洖鍊圭€氾拷
核心提示:·sql server(WINDOWS平台上强大的数据库平台) 存储过程分页·列出 sql server(WINDOWS平台上强大的数据库平台) 数据库中所有的存储·sql server(WINDOWS平台上强大的数据库平台) SQL语句导入导出大全·sql se
    ·sql server(WINDOWS平台上强大的数据库平台) 存储过程分页
    ·列出 sql server(WINDOWS平台上强大的数据库平台) 数据库中所有的存储
    ·sql server(WINDOWS平台上强大的数据库平台) SQL语句导入导出大全
    ·sql server(WINDOWS平台上强大的数据库平台) SQL语句调优技巧
    ·sql server(WINDOWS平台上强大的数据库平台) 事务日志
    ·从sql server(WINDOWS平台上强大的数据库平台) 向Oracle(大型网站数据库平台) 8迁移的技术实
    ·sql server(WINDOWS平台上强大的数据库平台) 中死锁产生的原因及解决办
    ·重建索引提高sql server(WINDOWS平台上强大的数据库平台)性能
    ·[收藏]利用sql server(WINDOWS平台上强大的数据库平台) Reporting Serv
    ·sql server(WINDOWS平台上强大的数据库平台) 存储过程的分页方案比拼

本文基于 Microsoft sql server(WINDOWS平台上强大的数据库平台) 代号“Yukon”的 Beta 1 版本,文中所有信息都有可能发生变化。

下载本文的代码:UDTsinYukon.exe (112KB)

注:本文是在产品投放生产之前编写的,因此,我们无法保证此处包含的任何细节都与在交付使用的产品中发现的细节完全一致。文中信息描述的是本文发布之时的产品,仅供规划之用。这些信息可在任何时候更改,恕不预先通知。

托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />不透明或抽象类型
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />创建程序集
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />类属性
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />比较 UDT 的值
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />为空性
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />支持的转换
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />其他要求
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />在 sql server(WINDOWS平台上强大的数据库平台) 中使用 UDT 创建程序集
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />创建类型
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />使用 UDT
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />删除和更改 UDT 以及程序集
托管 UDT 使您能够扩展 sql server<font class=reblank  style=(WINDOWS平台上强大的数据库平台) 的类型系统(图一)" />小结

用户定义类型 (UDT) 是 sql server(WINDOWS平台上强大的数据库平台)? 下一个版本(代号“Yukon”)中新的公共语言运行库 (CLR) 的集成功能之一。Yukon 中的 UDT 标志着自 sql server(WINDOWS平台上强大的数据库平台) 以前版本以来一个显著的进步。例如,sql server(WINDOWS平台上强大的数据库平台) 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(WINDOWS平台上强大的数据库平台) 中没有的数据结构。使用 UDT,您能够创建代表地理空间(位置和地图类型的数据)、自定义二进制数据、编码数据以及加密数据的数据结构。

您可以使用实现 UDT 协定的托管代码来创建一个类,从而扩展 SQL 类型系统。接下来使用 CREATE ASSEMBLY 语句将包含 UDT 的已编译程序集加载到服务器上的数据库中,并使用公开托管代码 UDT 的 CREATE TYPE 语句在数据库中创建类型。

这时,您可以在表定义或变量声明中使用该类型。让我们从检查 UDT 托管代码需求开始。

1 2 3 4 5 6  下一页

Tags:托管 UDT 能够

编辑录入:coldstar [复制链接] [打 印]
赞助商链接