在SQLServer 2005中编写存储过程
更新时间:2009年07月26日 22:08:43 作者:
在SQL Server 2000中,实际上只有一种创建存储过程的方法:即T-SQL语句。之前的每个SQL Server版本都采用这个程序。
然而,在SQL Server 2005中,我们可以用.NET家族的语言——主要是VB.NET和C#来编写存储过程(以及方法、触发器和其它组件)。让我们来熟悉一下关于编写存储过程新方法的5个常见问题。它们是非常值得我们探讨的。
1、为什么我们必须使用CLR模式来编写存储过程呢?
主要原因是速度。SQL CLR在很多方式下都运行较快:比如字符串处理,它比T-SQL运行快很多,并且对于错误的处理能力也更加强大。同时,由于CLR所提供的来执行这些事务的框架都更为完善,因此任何需要与数据库之外资源进行事务交互的存储过程——比如,文件系统或者Web服务——CLR SP都是表现最好的。
2、CLR最适合编写哪些类型的存储过程?
一般来说,在数据上执行繁重计算而不是仅仅是查询数据的SP最适合用CLR。如果一个CLR SP只是封装一个复杂的SELECT语句,那么我们将无法看到显著的性能增益,因为每次运行SP时,都必须验证CLR中的SQL语句。事实上,它比仅将SELECT语句作为T-SQL SP处理表现还要差。
一个经典的好方法是:如果需要执行的SQL的行数很多,那么可以将SQL封装在一个常规的SP上。如果想要在一个大的数据集上运行CLR风格的处理,那么我们可以在CLR SP内部调用一个常规的SP来获取这个大的数据集。这样,常规的SP会被预编译,性能也会更好,同时数据转换性能也会有所提高。
注意:这种情况是假定我们需要在数据层上进行复杂的数据处理,而不是在显示层上。事实上我们在编写代码之前就需要考虑这些问题。
3、是否应该把现有的存储过程转换为CLR模式?
简单而言,“要有好处才去做”。在这种情况下,可以为指定的存储过程创建一个同等的CLR实现的版本,然后使用实际数据对两种SP进行测试。除非我们可以确定新的存储过程:(a)按照预计的方式运行,(b)对性能有实际的提升,否则应该继续使用老的存储过程。其实CLR跟其它的存储过程一样,没什么奇特的。
4、在没有开发IDE的情况下,可以创建CLR(Common Language Runtime)存储过程吗?
当然,我们可以通过C#编译手动实现这类开发。然而,使用Visual Studio或者类似的IDE可以更简单,特别是当我们在整个企业范围内转换或实现大量SP时。
5、转换有多难?
很明显,我们必须具备其中一种支持语言的知识,如VB.NET或者C#。事实上,SQL命令是“封装”在CLR代码中的,因此,只要我们知道如何使用它,那么在CLR重新实现现有的T-SQL是不难的。比较有难度的是如何使用这种语言来优化我们正在做的工作,这个问题就不是几个要点就可以归纳的。
1、为什么我们必须使用CLR模式来编写存储过程呢?
主要原因是速度。SQL CLR在很多方式下都运行较快:比如字符串处理,它比T-SQL运行快很多,并且对于错误的处理能力也更加强大。同时,由于CLR所提供的来执行这些事务的框架都更为完善,因此任何需要与数据库之外资源进行事务交互的存储过程——比如,文件系统或者Web服务——CLR SP都是表现最好的。
2、CLR最适合编写哪些类型的存储过程?
一般来说,在数据上执行繁重计算而不是仅仅是查询数据的SP最适合用CLR。如果一个CLR SP只是封装一个复杂的SELECT语句,那么我们将无法看到显著的性能增益,因为每次运行SP时,都必须验证CLR中的SQL语句。事实上,它比仅将SELECT语句作为T-SQL SP处理表现还要差。
一个经典的好方法是:如果需要执行的SQL的行数很多,那么可以将SQL封装在一个常规的SP上。如果想要在一个大的数据集上运行CLR风格的处理,那么我们可以在CLR SP内部调用一个常规的SP来获取这个大的数据集。这样,常规的SP会被预编译,性能也会更好,同时数据转换性能也会有所提高。
注意:这种情况是假定我们需要在数据层上进行复杂的数据处理,而不是在显示层上。事实上我们在编写代码之前就需要考虑这些问题。
3、是否应该把现有的存储过程转换为CLR模式?
简单而言,“要有好处才去做”。在这种情况下,可以为指定的存储过程创建一个同等的CLR实现的版本,然后使用实际数据对两种SP进行测试。除非我们可以确定新的存储过程:(a)按照预计的方式运行,(b)对性能有实际的提升,否则应该继续使用老的存储过程。其实CLR跟其它的存储过程一样,没什么奇特的。
4、在没有开发IDE的情况下,可以创建CLR(Common Language Runtime)存储过程吗?
当然,我们可以通过C#编译手动实现这类开发。然而,使用Visual Studio或者类似的IDE可以更简单,特别是当我们在整个企业范围内转换或实现大量SP时。
5、转换有多难?
很明显,我们必须具备其中一种支持语言的知识,如VB.NET或者C#。事实上,SQL命令是“封装”在CLR代码中的,因此,只要我们知道如何使用它,那么在CLR重新实现现有的T-SQL是不难的。比较有难度的是如何使用这种语言来优化我们正在做的工作,这个问题就不是几个要点就可以归纳的。
相关文章
Windows2003 SQL2005添加系统用户修改系统登录密码
这篇文章主要介绍了Windows2003 SQL2005添加系统用户修改系统登录密码的方法,大家如何忘记了系统的密码可以试试这个方法2013-11-11sql server 2005因架构无法删除用户错误15138的解决方法
这篇文章主要介绍了Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除问题的解决方法 ,需要的朋友可以参考下2014-07-07使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法
我们经常遇到树型结构,把它们显示在一个类似TreeView控件上的情况。这时我们可以使用Recursive Common Table Expressions(CTE)实现2011-10-10SQLServer Job运行成功或失败时发送电子邮件通知的图文教程
虽然我们可以通过Job日志来查看SQL Server Job运行成功或是失败,但是人工主动去查没有及时性,也不智能化。下面简单介绍一下如何设置SQL Server的邮件通知,让Job完成后,自动发送状态邮件。2009-09-09SQL Server 2005通用分页存储过程及多表联接应用
分页存储过程在好多文章中都有介绍过;本篇是不久前写的一个分页存储过程,可应用于SQL Server 2005上面,感兴趣的朋友可以研究下,希望本文对你学习存储过程有所帮助2013-01-01SQL Server Management Studio Express管理器 没有导入导出数据的向导的解决方法
我的SQL2005 Microsoft SQL Server Management Studio Express管理器里,右键单击一个数据库,指向“任务”,再单击“导入数据”或“导出数据”中没有这个选项,要想实现导入/导出数据,要怎么办呢?2011-04-04如何在SQL SERVER 2005存储过程中,使用循环语句
本篇文章是对如何在SQL SERVER 2005存储过程中,使用循环语句进行了详细的分析介绍,需要的朋友参考下2013-06-06
最新评论