【发布时间】:2017-01-03 09:53:30
【问题描述】:
我创建了一个触发器,它像这样调用程序集:
CREATE TRIGGER Testrigger ON STATION
FOR INSERT
AS EXTERNAL NAME assemblytest.[WriteTimeInfile.Program].Testrigger
该程序集中的 .NET 代码执行以下操作:
namespace WriteTimeInfile
{
public class Program
{
[SqlTrigger(Name = @"Testrigger", Target = "[dbo].[STATION]", Event = "FOR INSERT, UPDATE, DELETE")]
public static void Testrigger()
{
File.AppendAllText(@"C:\Users\Vivien\date.txt",
DateTime.Now.ToString() + Environment.NewLine);
}
}
}
我希望能够将创建的行或更新的行作为参数传递,如下所示:
CREATE TRIGGER Testrigger ON STATION
AFTER INSERT
AS
EXTERNAL NAME assemblytest.[WriteTimeInfile.Program].Testrigger (STATION.ID)
我在 StackOverflow 上发现了一个 7 岁的 topic,它告诉我无法将参数传递给 CLR 程序集。
我在问最近的 SQL Server 版本现在是否可以实现。
你知道有没有办法,如果有,请问怎么做?
【问题讨论】:
-
您始终可以从 SQLCLR 触发器 as shown in this old version of the documendation 中访问 INSERTED 和 DELETED 表。您不需要将任何参数传递给触发器,就像您不需要将任何参数传递给普通触发器一样
-
为什么你想将参数传递给触发器?什么样的参数?为什么不使用存储过程呢?如果您想通过更改检测实现某种 ETL 功能,您可以使用更改跟踪(不是 CDC)来查找键并更改已修改行的类型并进行处理
标签: .net sql-server tsql sqlclr database-trigger