在SQLServer 2005中编写存储过程
程序员文章站
2022-04-23 20:15:40
然而,在sql server 2005中,我们可以用.net家族的语言——主要是vb.net和c#来编写存储过程(以及方法、触发器和其它组件)。让我们来熟悉一下关于编写存储...
然而,在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是不难的。比较有难度的是如何使用这种语言来优化我们正在做的工作,这个问题就不是几个要点就可以归纳的。
推荐阅读