Процедура T-SQL — параметр фильтра как Object/CLR/Xml/UDT

Cliffs: Существует ли известный шаблон для передачи стандартного типа «фильтр» в хранимую процедуру для инкапсуляции параметров звездной даты/даты окончания/размера страницы/номер страницы?

Не уверен, что правильное место для этого вопроса. Я изучаю идею передачи параметра объекта фильтрации хранимой процедуре, которая инкапсулирует наши общие параметры фильтрации (дата начала, дата окончания, номер страницы, размер страницы, список целых чисел и т. д.). Это делается для того, чтобы уменьшить количество одинаковых параметров и стандартного SQL, разбросанного по нашим процедурам. Это даст нам более стандартный интерфейс и отправную точку для каждой процедуры с самого начала. Я не смог найти много информации по теме.

Паттерн, который я заметил: при первой сборке большинства SP они начинаются с одного параметра id, используемого в предложении where.В какой-то момент позже вам может понадобиться добавить параметры для параметров диапазона дат (дата начала, дата окончания или динамические диапазоны «ytd, mtd, dtd»). Если набор данных достаточно велик, вам также может понадобиться ввести pagesize/pagenum для пейджинга на стороне сервера. Через некоторое время вы можете понять, что вам нужны результаты для списка идентификаторов, а не для одного идентификатора, поэтому вы добавляете параметр CSV или XML для конвертирования идентификаторов.

В конечном счете, многие хранимые процедуры имеют множество одинаковых шаблонов и (надеюсь) идентичных параметров для обработки этих стандартных параметров фильтрации. Я пытаюсь исследовать известные шаблоны для передачи инкапсулированного параметра объекта фильтра в мои процедуры, которые в идеале должны быть строго типизированы на стороне С#. Это было бы особенно полезно при управлении группой процедур, формирующих отчеты, для которых требуются одни и те же параметры фильтрации (в дополнение к параметрам запроса, относящимся к отчету).

Моя цель — сократить количество необходимых параметров до необходимого минимума для предложения WHERE и создать стандартный механизм для передачи общих параметров фильтрации в процедуру и использования этих значений внутри процедуры. Как этого можно добиться с помощью параметров XML, CLR или UDT?

В контексте этого вопроса я использую SQL Server 2008 через ADO.Net из C# 2.0. К сожалению, на данный момент LINQ/EF не подходит для этого проекта, и мы должны придерживаться существующей СУБД. Если есть известный шаблон, требующий изменения технологий, мне было бы интересно о нем узнать.

Изменить: Спасибо за ответы.Я добавил награду за 50 баллов, которую я оставлю на несколько дней, чтобы попытаться способствовать дальнейшему обсуждению. Если мой вопрос недостаточно ясен, просто оставьте комментарий..

9
задан mellodev 18 May 2012 в 22:40
поделиться