Вопрос о том, приведет ли написание хранимой процедуры в C # с использованием .net CLR в составе SQL Server 2008 моя хранимая процедура будет менее эффективной, чем если бы она была написана на T-SQL? действительно слишком широк, чтобы дать значимый ответ. Эффективность сильно варьируется в зависимости не только от того, какие типы операций вы выполняете, но также от того, как вы выполняете эти операции. У вас может быть хранимая процедура CLR, которая должна превосходить аналогичный процесс T-SQL, но на самом деле работает хуже из-за плохого кодирования и наоборот.
Учитывая общую природу вопроса, я могу сказать, что «в общем», то, что можно сделать в T-SQL (без особой сложности), вероятно, следует делать в T-SQL. Одним из возможных исключений может быть TVF, поскольку в CLR API есть очень интересная опция для потоковой передачи результатов обратно (я написал статью для SQL Server Central - требуется бесплатная регистрация - около STVFs ). Но невозможно знать наверняка, не имея как кодов CLR, так и версий T-SQL, и не протестировав их с данными производственного уровня (даже плохо написанный код, как правило, работает достаточно хорошо с 10 тыс. Строк или меньше).
Итак, реальный вопрос здесь сводится к:
Я знаю C # лучше, чем T-SQL. Что мне делать?
И в этом случае лучше всего спросить, как решить эту конкретную задачу в T-SQL. Вполне возможно, что есть несложные решения, о которых вы просто еще не знаете, но сможете понять, узнав об этой функции / методике / и т. Д. И вы все равно можете написать эквивалентное решение в SQLCLR. и сравнить производительность между ними. Но если нет удовлетворительного ответа для обработки этого в T-SQL, то сделайте это в SQLCLR.
При этом я три года назад провел исследование, посвященное SQLCLR и производительности T-SQL, и опубликовал результаты на Simple-Talk .