4

Очень короткий фон: Мы используем хранимые процедуры CLR для применения контроля доступа, используя Active Directory, в результатах запроса, чтобы ограничить то, что может видеть конечный пользователь. В двух словах это делается путем удаления строк из данных, где пользователь не удовлетворяет критериям доступа к результату (документ в этом случае).Вызов хранимой процедуры T-SQL из хранимой процедуры CLR

Эта фильтрация была ранее сделана на клиенте перед отображением результатов. SQL 2008 и гораздо более мощный сервер - это мотивация для переноса этой фильтрации доступа с клиента.

Что мне интересно, есть ли какое-либо преимущество в производительности от вызова исходной обычной хранимой процедуры T-SQL из эквивалентной эквивалентной процедуры CLR, вместо того, чтобы иметь встроенный T-SQL, переданный в объект comand (например, который в этом случае является только оригинальным T-SQL, который был сделан хранимой процедурой)? Я не могу найти нигде, где кто-то упомянул об этом (отчасти, вероятно, потому, что это было бы очень запутанным как пример CLR SP, я думаю :-)). Мне кажется, что вы могли бы, поскольку хранимый процесс T-SQL уже оптимизирован и скомпилирован?

Могу ли я подтвердить это для меня?

Надеюсь, я был достаточно ясен. Большое спасибо,

Кол.

ответ

0

Если ваша хранимая процедура SQL CLR выполняет конкретный запрос правильно (хорошо параметризован) и выполняет его довольно часто, то этот запрос T-SQL будет выполняться один раз через всю последовательность «определить оптимальный план выполнения», а затем сохранить в кеше плана вашего SQL Server (и не высылается из него быстрее, чем аналогичная хранимая процедура T-SQL).

Таким образом, он будет таким же, как «предварительно скомпилированный», как исходная хранимая процедура T-SQL. С этой точки зрения я не вижу никакой пользы.

Если вы можете настроить инструкцию SQL из своей процедуры SQL CLR таким образом, чтобы на самом деле она даже не включала эти строки в результирующий набор, который вы все равно выкинете, тогда ваш SQL-CLR хранимая процедура, выполняющая правильно параметризованный запрос T-SQL, может быть даже немного быстрее, чем наличие стандартной хранимой процедуры T-SQL, возвращают слишком много данных, из которых вам нужно снова исключить некоторые строки.

+0

Это имеет смысл. Я также рассмотрю настройку инструкции SQL. Возможно, я могу передать SID в сам запрос T-SQL, поскольку они уже доступны для фильтрации результатов этого запроса в CLR SP. Большое спасибо за вашу помощь. – Colm

Смежные вопросы