![]() |
1
17
我将给出一个很好的例子:clr有一个内置的regex对象,这在SQL Server中非常缺乏。现在,编写函数来执行基于regex的验证约束/修复非常简单。 |
![]() |
2
8
不同的目的。对于编写高度过程化的代码或使用T-SQL不可访问的系统工具的情况,clr存储过程非常有用。尽管没有固有的理由不能针对它编写应用程序存储过程,但一般来说,您不会将clr存储过程视为仅用于编写应用程序存储过程的另一种语言。通常,clr存储过程的大多数用途都是用于系统目的,而不是应用程序组件,尽管这绝不是一个硬性和快速的规则。 clr集成层提供了一些不能直接从t-sql存储过程中获得的工具,例如自定义聚合函数。它还提供对.NET库的访问,这对于访问T-SQL不支持的功能可能很有用。 T-SQL做传统的数据库工作,并与查询优化程序集成,因此它仍然最适合于面向集的数据库代码。有一些用于clr存储过程的API钩子可以向查询优化程序提供信息,但这增加了一些复杂性。 还可以使用clr集成来定义T-SQL代码可以访问的函数。在某些情况下,这些函数可能比T-SQL函数更快、内存效率更高。这个 Wrox press book on CLR integration 对此进行了深入的讨论。 |
![]() |
3
6
您还可以从sqlcr方法调用外部WebService-在T-SQL中不完全可行:-) 马克 |
![]() |
4
2
SQL Server中的sqlcr/clr集成只是另一个帮助解决某些(不是全部)问题的工具。有一些事情比纯T-SQL更好,还有一些事情只能通过SQLCLR完成。我为SQL Server Central写了一篇文章, Stairway to SQLCLR Level 1: What is SQLCLR? (阅读文章需要免费注册),解决这个问题。基础知识包括(有关详细信息,请参阅相关文章):
另一个需要考虑的问题是,有时能够在应用程序和数据库之间共享代码是有益的,这样数据库就可以洞察某些业务逻辑,而无需构建自定义的、仅限内部的屏幕来访问该应用程序代码。例如,我曾在一个系统中工作过,该系统从客户导入数据文件,并使用大多数字段的自定义散列,并将该值保存到数据库中的行中。这允许在再次导入数据时轻松跳过行,因为应用程序将从输入文件散列值并与存储在该行上的散列值进行比较。如果它们是相同的,那么我们马上就知道所有字段都没有改变,所以我们继续下一行,这是一个简单的int比较。但是这个散列算法只存在于应用程序代码中,因此无论是用于调试客户案例还是通过标记至少有一个字段有更改的行(来自应用程序的更改,而不是在新导入文件中查找更改),我都无法将任何内容加载到后端服务中。o.这将是在数据库中有一个相当简单的业务逻辑的好机会,即使不是为了正常的处理;在数据库中有相当于一个编码值的值,并且没有能力理解它的含义,这使得解决问题变得非常困难。 如果有兴趣在不需要编写任何代码的情况下看到这些功能中的某些功能,那么 SQL# (我是作者)有regex函数、自定义聚合(udas)、自定义类型(udts)等。 |