我创建调用这样的组件的触发器:如何将参数传递给外部(SQLCLR)SQL服务器触发
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触发器中访问INSERTED和DELETED表,[如此旧版本的文档所示](https://msdn.microsoft.com/zh-cn/library/938d9dz2(v = VS.90)的.aspx)。您不需要将任何参数传递给触发器,就像无需将任何参数传递给正常触发器一样 –
*为什么要将参数传递给触发器?什么样的参数?为什么不使用存储过程呢?如果要使用更改检测实现某种ETL功能,可以使用更改跟踪(而不是CDC)来查找密钥并更改修改行的类型并处理它们。 –