Sql 从主数据库引用CLR触发器

Sql 从主数据库引用CLR触发器,sql,.net,sql-server,clr,sqlclr,Sql,.net,Sql Server,Clr,Sqlclr,我已在SQL Server的主数据库上创建了CLR程序集 此程序集定义CLR触发器函数,我想在SQL语句中将这些函数附加到服务器上其他数据库中的表 大概是这样的: USE myDb; CREATE TRIGGER myTrigger ON myTable FOR INSERT,UPDATE,DELETE AS EXTERNAL NAME [master].[dbo].myAssembly.TriggerClass.Report; 是否有一种好的方法使其工作?所有SQLCLR对象类型的外部名称子

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

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

大概是这样的:

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

是否有一种好的方法使其工作?

所有SQLCLR对象类型的
外部名称
子句只允许引用当前数据库中的程序集。示例中问题中所需代码的
database\u name.schema\u name.
部分的语法无效。您可以在以下位置的“创建触发器”的MSDN页面上看到:

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


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

所有SQLCLR对象类型的
外部名称
子句只允许引用当前数据库中的程序集。示例中问题中所需代码的
database\u name.schema\u name.
部分的语法无效。您可以在以下位置的“创建触发器”的MSDN页面上看到:

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


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

我认为您不能这样做。我认为CLR触发器必须位于添加到特定数据库的程序集中(这至少可以阻止破坏,例如,如果从一台服务器备份一个数据库并在另一台服务器上还原,那么它就不会查找可能不存在的资源),我认为您不能这样做。我认为CLR触发器必须位于添加到特定数据库的程序集中(这至少可以阻止破坏,例如,如果数据库从一台服务器备份并在另一台服务器上还原,那么它不会查找可能不存在的资源)