Утверждение параметров в табличном UDF - PullRequest
0 голосов
/ 14 января 2011

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

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

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

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

1 Ответ

1 голос
/ 14 января 2011

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

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

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

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

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

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

...