在SQL-CLR程序集中..
有没有一种方法可以加载某些数据,并且可能只在装配加载上读取数据库?
让我说我有一类用户定义的函数,这些函数使用一些正则表达式,必须根据我在DB中的一些表中的数据构建和编译,有没有一种方法可以从表中读取,创建我的Regex对象并在AppDomian的生命周期中保持这些对象的活着,这样每当调用任何使用这些对象的用户定义函数时,它就不必重建它们?
编辑:静态构造函数不是读取数据的有效上下文。
我希望我能够清楚地表达自己的意思,谢谢你。
答案 0 :(得分:1)
是否有一种方法可以加载某些数据,并且可能只在装配加载上从数据库读取?
这取决于您对“特定数据”的位置和/或程序集的PERMISSION_SET
的灵活程度。
如果程序集必须保持为SAFE
(这是首选的,如果可能的话),那么只能从程序集外部读取的两个源是:
appSettings
部分。 更新:到目前为止,似乎从配置文件中读取不适用于Linux(从SQL Server 2017开始的新平台)。虽然这些都不是“动态”的,例如从该表中读取,但是可以在该设置表上设置触发器以将适当的数据写出到 sqlservr.exe.config 文件。我不会为高度事务性的表推荐这个,但我在此假设为此目的的值并没有经常改变,特别是因为计划是在static readonly
类变量中缓存它们。
如果程序集已设置为EXTERNAL_ACCESS
,那么您可以定期/外部SqlConnection
从数据库获取数据。但是,如果这是唯一的原因,您将程序集设置为EXTERNAL_ACCESS
,那么我会选择上面提到的配置文件选项,因为如果程序集是,则确定性方法的性能更好设为SAFE
。
答案 1 :(得分:0)
我认为不同SQL服务器版本之间的行为有所改变,但静态构造函数可能有所帮助:http://msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.80).aspx