Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как убрать запросы, вызванные процедурами  [new]
Starlex
Member

Откуда: С.-Петербург
Сообщений: 1169
Добрый день!

Есть некая процедура, для простоты я приведу её схематично

create procedure sp1
as

exec sp2
exec sp3
exec sp4

select * from myTable


Внутри неё вызываются несколько других процедур, каждая из которых что-то делает, и возвращает некую выборку. Но как результат выборки процедуры sp1 должен быть только последний select. Можно ли перед вызовом селекта "задавить" 3 предыдущих?
Просто есть некая отчетность и ей подавай только одну выборку и на это я повлиять не могу и есть старые процедуры sp2, sp3, sp4, которые тоже нельзя модифицировать.

К сообщению приложен файл. Размер - 11Kb
8 дек 11, 16:12    [11730576]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Starlex
Можно ли перед вызовом селекта "задавить" 3 предыдущих?
Нет.
8 дек 11, 16:28    [11730695]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
insert ... exec ...
Но только без их вложенности.
8 дек 11, 16:42    [11730819]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
@nooutput
Guest
Starlex,

параметр вроде @nooutput
8 дек 11, 22:01    [11732873]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
Starlex
Member

Откуда: С.-Петербург
Сообщений: 1169
invm
insert ... exec ...
Но только без их вложенности.


Спасибо! помогло
9 дек 11, 11:18    [11734857]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Starlex
invm
insert ... exec ...
Но только без их вложенности.


Спасибо! помогло
Но параметр с дефолтным значением, управляющий выводом -- лучше.
9 дек 11, 11:53    [11735308]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm, некоторые идут дальше/по другому:

Вывод в процедурах использовать по минимуму. Процедуры меняют данные, предсталвения и функции предоставляют их.
А в OUT параметрах ключевая инфа.

Какгриться модульность/разделяемость кода. (основы проектирования)
9 дек 11, 12:15    [11735510]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Mnior
invm, некоторые идут дальше/по другому:

Вывод в процедурах использовать по минимуму. Процедуры меняют данные, предсталвения и функции предоставляют их.
А в OUT параметрах ключевая инфа.

Какгриться модульность/разделяемость кода. (основы проектирования)
А если система была спроектирована до появления SQL Server 2000?
9 дек 11, 12:24    [11735592]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
Starlex
Member

Откуда: С.-Петербург
Сообщений: 1169
invm
Starlex
пропущено...

Спасибо! помогло
Но параметр с дефолтным значением, управляющий выводом -- лучше.


Да, это понятно. Но процедуры, которые вызываются, старые и туда я не полезу :)
9 дек 11, 12:59    [11735876]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Starlex
invm
пропущено...
Но параметр с дефолтным значением, управляющий выводом -- лучше.


Да, это понятно. Но процедуры, которые вызываются, старые и туда я не полезу :)
А чем мешает вывод нескольких датасетов?
Разве их проигнорировать нельзя?
9 дек 11, 13:20    [11736076]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
iap
А чем мешает вывод нескольких датасетов?
Разве их проигнорировать нельзя?
А если клиента нельзя изменить?
9 дек 11, 14:04    [11736625]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
invm
iap
А чем мешает вывод нескольких датасетов?
Разве их проигнорировать нельзя?
А если клиента нельзя изменить?
Тогда это нехороший клиент.
9 дек 11, 14:05    [11736640]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Mnior
invm, некоторые идут дальше/по другому:

Вывод в процедурах использовать по минимуму. Процедуры меняют данные, предсталвения и функции предоставляют их.
А в OUT параметрах ключевая инфа.

Какгриться модульность/разделяемость кода. (основы проектирования)
И еще. Представления, функции и процедуры дают возможность использовать при проектировании принцип "черного ящика". И степень достижимой "черноты" у них разная -- у представления минимальна, у процедуры максимальна.
9 дек 11, 14:21    [11736819]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
Starlex
Member

Откуда: С.-Петербург
Сообщений: 1169
iap
А чем мешает вывод нескольких датасетов?
Разве их проигнорировать нельзя?


В данном случае это отчетная система, которая принимает на вход специально подготовленные данные. ДатаАдаптер с несколькими датасетами она принять, наверное, может, но их нужно там прописывать. Зачем прописывать всякий мусор? Да и кроме того, в зависимости от параметров процедуры внутри могут и не вызываться, а значит к-во датасетов может меняться.
9 дек 11, 14:53    [11737163]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Starlex
iap
А чем мешает вывод нескольких датасетов?
Разве их проигнорировать нельзя?


В данном случае это отчетная система, которая принимает на вход специально подготовленные данные. ДатаАдаптер с несколькими датасетами она принять, наверное, может, но их нужно там прописывать. Зачем прописывать всякий мусор? Да и кроме того, в зависимости от параметров процедуры внутри могут и не вызываться, а значит к-во датасетов может меняться.
Обычно по-умолчанию ловится последний датасет. И никто не парится.
Чтобы получить все датасеты и впоследствии переключаться между ними, надо повозиться.
9 дек 11, 15:15    [11737408]     Ответить | Цитировать Сообщить модератору
 Re: Как убрать запросы, вызванные процедурами  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
invm
А если система была спроектирована до появления SQL Server 2000?
Это как-то противоречит моим словам?
Очевидно что нет. Или вы любите выкидывать слова из сказанного.
1. Да, я знаю особености версии 7 и ниже.
2. Следующее высказываение более широкое и не менее верное:
А если система была спроектирована?
Мелко. Больше рефлексии.

invm
И степень достижимой "черноты" у них разная -- у представления минимальна, у процедуры максимальна.
Наоборот. Процедуры протекают:
  • лишние наборы
  • глюки Пайпа
  • побочные эффекты
  • и всё такое

    Декларативные подход (представления) лишины этого, "внешняя оболочка" ящика более стабильна.
    И не забывайте про Table-Valued функции.

    Процедуры могут выдавать больше наборов за раз - вот критерий, который часто не особо важный. И гипотетически в редких случаях более эффективны. Но тут сильно зависит от навыков.

    То что кажется быстым на нижнем уровне, делает не эффективным верхний.
    Для модульного программирования, то что ему помогает (требования к представлениям) есть полезные свойства.
  • 9 дек 11, 19:42    [11739358]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить