Я рассматриваю использование триггера CLR вместо традиционного T-SQL, потому что мне нужно использовать некоторую логику, которая уже реализована в C #. Я знаю, что SQL-сервер поддерживает интеграцию с CLR, и в моем случае это решение, которое стоит попробовать.
Однако операции, которые я хочу выполнить, могут быть несколько медленными. Не достаточно медленный, чтобы полностью исключить их использование в инициируемых действиях, но, вероятно, заметно медленный, когда дело доходит до вставки сотен тысяч записей. Самая медленная часть может сильно выиграть от кеширования, я полагаю, что будет очень мало кешей и тысячи попаданий в кеш. На этом этапе все это приводит к вопросу: могут ли триггеры CLR иметь какое-либо состояние? И, что более важно, каков жизненный цикл этого состояния?
Полагаю, я мог бы использовать статические поля класса триггера для хранения некоторого состояния, но я понятия не имею, когда оно инициализируется (когда сервер запускается? При запуске транзакции? Не указано?). Я не уверен, является ли это безопасным маршрутом, и поэтому спрашиваю, какова общая практика использования некоторых состояний в триггерах CLR (если есть).
Чтобы избежать путаницы: мне нужно кэшировать объекты CLR , а не результаты некоторых запросов SQL, поэтому речь идет не о том, насколько хорош сам SQL Server в кэшировании, я хочу кэшировать некоторые данные, которые не ' принадлежит базе данных. Кроме того, я рассматриваю CLR не потому, что не могу выполнять строковые операции и проверку границ в T-SQL. Мне нужно выполнить некоторую логику, которая реализована в библиотеке классов CLR и имеет много зависимостей. Стоит ли использовать триггеры в этом случае - это другой вопрос, который почти не имеет к этому отношения.
Большое спасибо заранее.
PS: Буду признателен за любые комментарии и идеи по теме, даже те, которые не отвечают на мой вопрос напрямую, но, пожалуйста, не делайте все о том, что "триггеры - это зло и не должны когда-либо использоваться "и" интеграция CLR медленная и главная проблема совместимости ". Кроме того, я знаю, что кому-то это может показаться «преждевременной оптимизацией», но сейчас я просто хочу знать, какие у меня варианты оптимизации, так как я новичок в интеграции CLR в SQL-сервер. Я не буду оптимизировать его, если результаты профилирования не предполагают этого, но я не хочу реализовывать все это, чтобы понять, что это слишком медленно, и я ничего не могу с этим поделать.
Я использую SQL Server 2008 и .NET 3.5.