Подсказка - установить целевой уровень триггера на правильный уровень. Хотя это не относится к CLR, подробности можно найти в MSDN здесь , но следующее, вероятно, будет работать для вас.
[Microsoft.SqlServer.Server.SqlTrigger (Name="TriggerName", Target="database", Event="FOR UPDATE")]
Затем, чтобы выяснить, какую таблицу или поле изменили, обратитесь к EventData, который находится в переменной SqlXml. Я создал класс, подобный следующему, чтобы получить доступ к свойствам структурированным способом.
using System.Data.SqlTypes;
using System.Xml;
using System.Xml.Serialization;
namespace CLRSQLTrigger
{
public class SqlEventData
{
readonly XmlDocument document = new XmlDocument();
public SqlEventData(SqlXml sqlXml)
{
if (sqlXml != SqlXml.Null)
{
document.LoadXml(sqlXml.Value);
}
}
public string EventType
{
get { return document.GetElementsByTagName("EventType")[0].InnerText; }
}
}
}
Значения, полученные заданным действием, намного проще декодировать, создав дамп переменной SqlXml, которая возвращается при запуске вашего события. Получив эти значения, вы можете использовать синтаксис, аналогичный описанному выше свойству EventType, или напрямую использовать метод GetElementsByTagName в своем коде. Есть буквально более 100 событий, и каждое событие имеет 4-12 полей, так что эта часть остается за вами. Если вы серьезно, есть XSD различных комбинаций, но это может замедлить вас по сравнению с методом отладки. Путь XSD будет примерно таким:
C: \ Program Files \ Microsoft SQL
Server \ 100 \ Tools \ Binn \ схемы \ SQLServer \ 2006 \ 11 \ событий