有没有办法在 SQL Server 中动态更改 CLR 过程的代码?
假设您有一个在 MS SQL Server 2008 R2 中部署了业务逻辑的程序集。这个程序集(或多个程序集)一直在使用(例如,在多个并发查询中为表的每一行调用一些函数)。所以你不能只是放弃组装。有没有办法动态更改我的业务逻辑或执行外部可变代码?
我已经探索过这些方法,但没有一个奏效:
- 反射.发射
- 莫诺·塞西尔
- 在 SQL Server 中部署的程序集中加载外部程序集
更新:问题不在于发布过程:我希望能够通过 GUI 动态设置一些安全规则。
例如,一些用户应该只能看到没有地址的客户或去年的交易等等。
规则并不复杂,但它们几乎每天都在变化,我们不能将它们放入代码中。其余的业务逻辑在 TSQL 中实现。选择 CLR 是因为性能问题(动态 SQL 太慢)。
还有另一种选择:生成集群视图(在 WHERE 部分使用规则),但速度不够快。
更多细节:
假设我们有一些代码选择大表 dbo.Transactions 的一部分
select *
from dbo.Transactions
where ... --filters from your business logic
如果我们想过滤结果以显示允许的行,我们可以生成一些索引视图并将其与结果集连接起来,如下所示:
select *
from dbo.Transactions t
inner join dbo.vw_Transactions v
on t.id = v.id
where ... --filters from your business logic
但是,如果我们在大多数情况下检查执行计划,查询分析器会决定不过滤 dbo.Transaction 然后使用 vw_Transactions 连接,而是先连接然后过滤(这绝对是不可取的)。FORCE ORDER 之类的提示无济于事。