【问题标题】:Reference CLR Triggers from the master database从 master 数据库中引用 CLR 触发器
【发布时间】:2016-02-20 02:46:50
【问题描述】:

我在 SQL Server 的主数据库上创建了一个 CLR 程序集。

这个程序集定义了 CLR 触发器函数,我想在 SQL 语句中将它们附加到服务器上其他数据库的表中。

类似这样的:

USE myDb;
CREATE TRIGGER myTrigger ON myTable FOR INSERT,UPDATE,DELETE
AS EXTERNAL NAME [master].[dbo].myAssembly.TriggerClass.Report;

有没有好办法让它工作?

【问题讨论】:

  • 我不认为你可以。我认为 CLR 触发器必须在添加到特定数据库的程序集中(这至少可以阻止损坏,例如如果数据库从一台服务器备份并在另一台服务器上恢复,那么它不会寻找可能不存在的资源)

标签: sql .net sql-server clr sqlclr


【解决方案1】:

所有 SQLCLR 对象类型的 EXTERNAL NAME 子句仅允许引用当前数据库中的程序集。问题中所需代码示例中的 database_name.schema_name. 部分不是有效的语法。您可以在 CREATE TRIGGER 的 MSDN 页面上看到这一点:

https://msdn.microsoft.com/en-us/library/ms189799.aspx

您需要将程序集添加到要在其中使用触发器的任何数据库中。

而且,如果您可以在其他数据库中引用程序集,您最好还是创建一个“实用程序”数据库(或其他名称,如 Common 等),而不是向系统数据库添加对象 :-)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 2016-08-04
    • 1970-01-01
    • 2012-02-19
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多