我創建調用這樣的組件的觸發器:如何將參數傳遞給外部(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)來查找密鑰並更改修改行的類型並處理它們。 –