Я создаю относительно простую SQL CLR на С#.
Задача этой среды CLR — публиковать события в теме сетки событий Azure.
Я хотел бы иметь возможность вызывать эту конкретную CLR из любого количества триггеров для любого количества таблиц (на самом деле их будет немного).
Учитывая основной код ниже, как точно получить имя таблицы, которая вызвала/запустила триггер? Я понятия не имею, с чего начать.
Я хотел бы иметь возможность удалить атрибут SqlTrigger и каким-то образом получить доступ к имени таблицы для свойства var table.
// I Would like to leave the attribute commented out
//
//[Microsoft.SqlServer.Server.SqlTrigger(Name = "PublishToEventGridTrigger",
// Target = "NamesOfThings", Event = "FOR UPDATE, INSERT, DELETE")]
public static void PublishToEventGridTrigger()
{
// TODO - How should these settings be handled?
// Not sure if config files are accessible... To test..
// ***************************************************************
string topicHost = "https://####.eventgrid.azure.net/api/events";
string topicKey = "####";
// TODO - Get Table name for this
var table = "How Do I set This";
string eventType = $"##.{table}.{SqlContext.TriggerContext.TriggerAction.ToString()}";
// ***************************************************************
try
{
// extract data involved in trigger
// Create the Event object
EventGridEvent evt = new EventGridEvent("QWDBEvent", eventType, new
TriggerData(SqlContext.TriggerContext, SqlContext.Pipe));
// Publish the event
Event.Publish(topicHost, topicKey, evt);
}
catch (Exception ex)
{
//TODO - how do we handle these through SQL CLR?
// Going with a fire-and-forget for now
SqlContext.Pipe.Send($"Failure firing {ex.Message}");
}
SqlContext.Pipe.Send($"Trigger fired");
}
INSERTEDиDELETED? Или просто знать, что событие произошло и за каким столом оно было? - person Solomon Rutzky   schedule 04.02.2020