sql-server - SQLCLR 静态类构造函数中的数据访问

标签 sql-server sqlclr

在 SQL-CLR 程序集中..
有没有一种方法可以让我加载某些数据并可能从 上的数据库中读取数据仅装配负载 ?
假设我有一类用户定义的函数,这些函数使用一些正则表达式,这些表达式必须根据我在数据库中的某些表中的数据构建和编译,有没有一种方法可以从表中读取,创建我的 Regex 对象并使这些对象在 AppDomian 的生命周期内保持事件状态,这样无论何时调用任何使用这些对象的用户定义函数,它都不必重建它们?

编辑:静态构造函数不是读取数据的有效上下文。

我希望我让自己足够清楚,提前致谢。

最佳答案

Is there a way that enables me to load certain data and possibly read from database on assembly load only ?



这取决于您对“某些数据”的位置和/或 PERMISSION_SET 的灵活程度。大会的。

如果程序集必须保留为 SAFE (如果可能的话,这是首选),那么唯一可以从程序集外部读取的两个源是:
  • 环境变量
  • app.config 文件(有关详细信息,请参阅我对这个 S.O. 问题的回答:Does SQL Server CLR Integration support configuration files?——是的,它也适用于 appSettings 部分)。 更新:到目前为止,似乎从配置文件中读取在 Linux(SQL Server 2017 的新平台)上不起作用。

  • 虽然这些都不像从该表中读取那样是“动态的”,但可以在该设置表上设置触发器以将适当的数据写出到 sqlservr.exe.config 文件。对于高度事务性的表,我不会完全推荐这个,但我在这里假设用于此目的的值不会经常更改,特别是因为计划无论如何都将它们缓存在 static readonly 中。类变量。

    如果程序集已设置为 EXTERNAL_ACCESS ,那么你可以做一个常规/外部 SqlConnection从数据库中获取数据。但是,如果这是您将程序集设置为 EXTERNAL_ACCESS 的唯一原因。 ,那么我会选择上面提到的配置文件选项,因为如果程序集设置为 SAFE,确定性方法的性能会更好。 .

    关于sql-server - SQLCLR 静态类构造函数中的数据访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686183/

    相关文章:

    sql-server-2008 - SQL Server 在线程中触发并运行 CLR 方法

    .net - 如何允许 SQL CLR 函数在并行查询计划中运行并具有数据访问权限

    sql - 根据给定的声誉获取最近的特权

    sql-server - 如何在 T-SQL 事务外执行插入和更新

    sql - 查找列字符串值的组合

    ado.net - SQL Server 2014 Native Client (12.0.0.0) - 有什么方法可以强制使用程序集版本(例如 SqlConnectionString "Type System Version")?

    c# - 基于 .net ComputeHash 的 SQL CLR 函数不适用于 Cyrillic

    mysql - C3p0 - MSSQL 上的表观死锁,但不是 PostgreSQL 或 MySQL

    sql-server - 如何在公用表表达式 (CTE) 中引用同一服务器内多个数据库中的表?

    linq - 如何在 SQL CLR 中添加 Linq 支持