Утверждение параметров в UDF с табличным значением

Есть ли способ создать «утверждения» для параметров UDF с табличным значением.

Я хотел бы использовать UDF с табличным значением из соображений производительности, однако я знаю, что определенные комбинации параметров (например, даты начала и окончания, которые отличаются друг от друга более чем на месяц) вызовут проблемы с производительностью на сервере для всех пользователей.

Конечные пользователи запрашивают базу данных через Excel с помощью UDF. UDF (и, в частности, UDF с табличным значением) полезны, когда данные слишком велики для Excel. Пользователи пишут простые запросы SQL, которые распределяют данные по группам, чтобы уменьшить количество строк. Например, пользователя могут интересовать еженедельные агрегаты, а не почасовые. Пользователи пишут группу с помощью оператора SELECT, чтобы уменьшить количество строк в 24x7 = 168 раз. Я знаю, что могу писать операторы RAISERROR в многопозиционных UDF, но UDF с табличным значением интегрированы в оптимизатор запросов, поэтому эти запросы более эффективны с UDF с табличным значением.

Итак, могу ли я определить утверждения для параметров, передаваемых в UDF с табличным значением?


person Clay Lenhart    schedule 14.01.2011    source источник


Ответы (1)


Короткий ответ: нет - TVF с одним оператором могут содержать только один оператор.

Есть несколько альтернатив, которые вы можете попробовать. Один из них - выполнить проверку параметров в операторе SQL, расширив предложение WHERE - например,

...
WHERE ...
AND DATEDIFF(day, @startDate, @endDate) < 31

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

Если вы используете SQL 2008, альтернативным подходом было бы изучение SQL-сервера. ресурс govenor, который позволяет ограничить пользователей или группы пользователей выполнением запросов, для которых расчетное время выполнения в секундах меньше заданного порогового значения.

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

person Ed Harper    schedule 14.01.2011