2014-01-07 1 views
0

У меня есть хранимая процедура, которая, как предполагается сделать следующее: -SQL Server 2008 - Лучшая практика для вызова хранимой процедуры для каждой строки таблицы

  1. Perform бизнес-логику и выбрать список Подписки идентификаторам ,
  2. Для каждой строки вышеуказанного выбора вызовите отдельную хранимую процедуру, чтобы получить список агентов, подписанных для данного идентификатора подписки.
  3. Вставьте результат для каждой строки в две другие таблицы.

Теперь я использовал цикл While для точки 2 и использовал условный оператор IF для вызова разных SP для разных идентификаторов подписки.

Примечание: - имя хранимой процедуры для вызова на шаге 2 является динамическим и варьируется в зависимости от идентификаторов подписки. Структура, которая отличается от возвращения SP, хотя и идентична. Я не контролирую эти процедуры и не смогу преобразовать эти procs в TVF, и, следовательно, внедрение Cross Apply (если оно служит этой цели) будет проблемой.

Вопрос в том, что я могу избежать этого итеративного подхода и выполнить ту же функциональность, следуя основанной на наборе подходам?

+1

Вы не можете составить хранимые процедуры в более крупные запросы, и вы исключили обычную рекомендацию (конвертируйте в TVF, оставьте сохраненную функцию обертки proc, которая просто вызывает TVF, чтобы другие пользователи не были затронуты) –

+0

IMHO, самое лучшее, что я могу сделать в этой ситуации, - создать функцию-оболочку, которая фактически вызывает хранимые процедуры на основе идентификаторов подписки. Таким образом, моя вызывающая последовательность будет My Stored Proc-> TVF (идентификатор подписки) -> Другие хранимые процедуры (идентификатор подписки). Хотелось бы узнать, есть ли лучшее решение, чем делать выше. – Abhirup

+0

TVF не могут вызывать хранимые procs - только наоборот. Сохраненные procs - это в значительной степени конец строки - они могут использовать все другие объекты SQL Server, но большинство других объектов SQL Server не могут использовать хранимые procs. –

ответ

0

После того, как я объяснил лучшие практики и необходимость преобразования хранимых процедур в TVF в пункте 2, клиент согласился на это, и, следовательно, проблема была решена теперь с использованием TVF и Cross Apply. Благодарю.

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