一、简介
Microsoft 通过宿主 Microsoft .NET Framework 2.0 公共语言运行库 (CLR),SQL Server 2005显著地增强了数据库编程模型的功能。它支持用任何 CLR 语言(特别是 Microsoft Visual C# .NET、Microsoft Visual Basic .NET 和 Microsoft Visual C++)编写过程、触发器和函数。同时,它还提供了扩展数据库系统中的类型系统和聚合函数的功能,方法是允许应用程序创建它们自己的数据类型和聚合函数。
本白皮书从数据库应用程序开发人员的角度描述了如何最有效地利用这项技术。它还将 CLR 与 SQL Server 中支持的现有编程语言(即 TransacT-SQL (T-SQL) 和扩展存储过程 (XP))进行了比较。本白皮书不打算提供这些功能的基本参考资料,SQL Server 2005 Beta 2 Books Online 对其进行了详细介绍。
本白皮书的目标读者包括数据库应用程序开发人员、架构师和数据库管理员。本白皮书假设读者熟悉基于 .NET Framework 的编程和数据库编程。
二、CLR 集成概述下面简要概述了 CLR 集成执行的 SQL Server 功能,以及 Visual Studio 2005 最终发布版本如何支持这些功能。
注册和执行数据库中的托管代码包括以下步骤:
| • |
开发人员将托管程序编写为一组类定义。将 SQL Server 内旨在用作存储过程、函数或触发器(下面统称为例程)的代码编写为类的 static(或 Microsoft Visual Basic .NET 中的 shared)方法。将旨在用作用户定义的类型和聚合的代码编写为一个整类。开发人员编译该程序并创建一个程序集。 |
| • |
然后,将此程序集上载到 SQL Server 数据库,在其中使用 CREATE ASSEMBLY 数据定义语言 (DDL) 将它存储到系统目录。 |
| • |
接着,创建 TransacT-SQL 对象,例如,例程(函数、过程和触发器)、类型和聚合,并将其绑定到已经上载的程序集中的入口点(对例程来说是方法,对类型和聚合来说是类)。使用 CREATE PROCEDURE/FUNCTION/ TRIGGER/TYPE/AGGREGATE 语句来完成这一步。 |
| • |
在创建了这些例程之后,应用程序就可以像使用 T-SQL 例程一样使用它们。例如,可以从 T-SQL 查询中调用 CLR 函数,从客户端应用程序或从 T-SQL 批处理中调用 CLR 过程,就好像它们是 T-SQL 过程一样。 |
Visual Studio 2005 Beta 1 支持在 SQL Server 2005 中开发、部署和调试托管代码。有一种新的项目类型(称为 SQL Server 项目),它允许开发人员在 SQL Server 中开发、部署和调试例程(函数、过程和触发器)、类型和聚合。
构建和部署
SQL Server 项目提供了代码模板,这使得开发人员能够轻松地开始为基于 CLR 的数据库例程、类型和聚合编写代码。该项目还允许添加对数据库中其他的程序集的引用。在构建项目时,可以将其编译成一个程序集。部署此程序集可以将程序集的二进制文件上载到与该项目相关联的 SQL Server 数据库中。部署操作还自动创建在数据库的程序集中定义的例程、类型和聚合,方法是使用在代码中定义的自定义属性(SqlProcedure、SqlFunction 和 SqlTrigger 等等)。它还上载与该程序集相关联的源代码和 .pdb 文件(调试符号)。
调试
对于任何平台来说,调试都是开发人员体验的基本部分。SQL Server 2005 和 Visual Studio 2005 为数据库编程人员提供了这些功能。调试 SQL Server 2005 对象的关键部分在于其易于安装和使用。调试到运行 SQL Server 的计算机的连接在很大程度上同调试传统操作系统中运行的进程的方式一样。调试器的功能不会受到客户端到服务器的连接类型的影响。这样就可以调试表格数据流 (TDS) 和 HTTP 连接。而且,还可以跨语言进行无缝调试。因此,如果有一个调用 CLR 存储过程的 T-SQL 存储过程,调试会允许您从 T-SQL 过程进入到 CLR 过程。
三、CLR 与 TransacT-SQL现在我们进入本文的关键部分:对 CLR 集成和 SQL Server 中支持的现有编程语言进行比较。
TransacT-SQL (T-SQL) 是 SQL Server 支持的本机编程语言。和大多数 SQL Server 版本一样,它包含数据处理功能和数据定义功能。数据处理功能一般可以分为两类:查询语言(由 SELECT/INSERT/UPDATE/ DELETE 语句组成)和过程语言(WHILE、赋值、触发器、光标等)。一般来说,SQL Server 中的 CLR 支持为过程语言提供了 T-SQL 的替代方法。
即使在 SQL Server 中引入 CLR 支持以前,数据库应用程序应该尽可能多地使用查询语言,这始终被认为是很重要的。数据库应用程序应该利用面向集的查询处理器,并且只在查询语言无法表示逻辑时才转向过程编程。对于 SQL Server 中的 CLR 支持,这仍然是正确的。不应该使用 CLR 来编写可以用简单的 SELECT 语句表示的过程代码。在 SQL Server 2005 中增加了许多重要的功能来提高T-SQL 查询语言的表达能力。
| • |
递归查询:遍历表中的递归层次的能力 |
| • |
分析函数:RANK 和 ROW_NUMBER 允许排列结果集中的行 |
| • |
新的关联操作:APPLY、PIVOT 和 UNPIVOT |
试图使用 CLR 功能的开发人员应该确保他们充分地利用查询语言,包括 SQL Server 2005 中的扩展在内。对于在查询语言中无法以声明方式表示的逻辑,他们应该考虑将 CLR 作为有效的替代办法。
现在让我们看一些方案,其中基于 CLR 的编程能够补充 T-SQL 查询语言的表达能力。通常,需要在查询(可称为函数)内嵌入过程逻辑。这允许许多方案,例如:
| • |
根据数据库表中存储的值,对每行进行复杂的计算(必须用过程逻辑来表示)。这可以包括将这些计算的结果发送给客户端,或者使用计算来过滤发送给客户端的行集,如以下示例中所示: SELECT <complex-calculation>(<column-name>,...) FROM <table> WHERE <complex-calculation>(<column-name>,...) = ... |
| • |
• 使用过程逻辑来评估表格结果,然后在 SELECT 或 DML语句的 FROM 子句中进行查询。 |
SQL Server 2000 引入了支持这些方案的 T-SQL 函数(标量和表值)。有了 SQL Server 2005,就可以用 CLR 语言更容易地编写这样的函数,并且会极大地提高它们的性能。之所以编写这些函数非常容易,是因为事实上编写 CLR 代码的开发人员可以利用 .NET Framework API中存在的大量有用函数和类。这个类/函数库比 TransacT-SQL 中支持的内置函数要丰富得多。此外,CLR 编程语言提供了 T-SQL 中所没有的丰富构造(例如数组和列表等)。与 T-SQL(它是一种解释语言)相比,CLR 编程语言之所以具有更好的性能,是因为托管代码是已编译的。对于涉及算术计算、字符串处理、条件逻辑等的操作,托管代码的性能可能要优于 T-SQL 一个数量级。
注:对于函数,几乎没有必要从函数中访问数据库。外部查询已经从数据库中检索到数据值,并且将其作为参数传递给函数。这是 CLR 的优势,在计算性任务上比 T-SQL 更胜一筹。
从 CLR 中访问数据
| 共12页: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页 | ||
|
|
|||
| · OSPF路由协议专栏 · 思科路由器产品 · 华为路由器产品 · 路由器模拟器 · AIX操作系统管理应用(.. · 思科路由器配置 · 路由器组网解决方案 · 路由器密码恢复 |
· 无线路由器故障处理 · 路由故障处理手册 · 路由器访问控制列表(AC.. · 路由器的安全配置与安.. · 无线路由器配置 · 路由器技巧 · 华为路由器配置 · 路由器配置基础 |
||
|
|||
| · Java基础教程 · VPN技术 · SQL Server 2005全解 · ARP攻击防范与解决方案 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · 三层交换技术专题 |
· SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · Solaris 10 配置管理 · C#技术开发指南 · Windows操作系统安装 |
||
|
|||
| · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 · Windows操作系统安装 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| · 职场冲浪(之八):让感.. ·职场冲浪(之七):潜心.. |
·人生如鞋 ·职场冲浪(之六):从离梦最.. |
| ·将职业教育职业化 - 各IT.. ·思科交换机上实现MAC地址.. |
·关于51CTO合作出书中的职.. ·OSPF动态路由协议入门简介 |
| · NGN:下一代网络 · 网络访问中断大排查 · FTTx光纤接入 |
· 平凡黑客讲述精彩人生(.. · 平凡黑客讲述精彩人生(.. · 平凡黑客讲述精彩人生(.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · Ubuntu 中文开源频道 · Solaris基础知识入门 · 微软正式发布英文版Wind.. |
· 服务器基础知识入门 · Rambus第二?看全缓冲内.. · 服务器节能对比测试:AM.. |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. · 双机热备技术 |