Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Хранимая процедура в MS SQL Server

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Shkval
Гость





СообщениеДобавлено: Пт Фев 20 2004 16:27    Заголовок сообщения: Хранимая процедура в MS SQL Server Ответить с цитатой

Всем привет.

Если кто знает, подскажите, пожалуйста, можно ли как-нибудь использовать результат вызова процедуры как таблицу. Вот что я имею ввиду: если у нас имеется табличная хранимая на сервере функция sf_Func(), то мы можем выполнить такой запрос:
SELECT * FROM TABLE1 T1, TABLE2 T2, sf_Func()
WHERE ...
т. е. таблицу, возвращаемую функцией sf_Func() мы объеденяем с таблицами Table1, Table2. А если у нас есть хранимая процедура sp_Proc, то ее мы запускаем при помощи инструкции EXECUTE, при этом такие запросы:
SELECT * FROM TABLE1 T1, TABLE2 T2, sp_Proc
WHERE ...

ИЛИ

SELECT * FROM TABLE1 T1, TABLE2 T2,
(EXECUTE sp_Proc)
WHERE ...

ИЛИ

INSERT INTO TABLE3
EXECUTE sp_Proc
Вызовут ошибку. Можно ли как-нибудь выполнить подобные запросы?

Заранее спасибо.
Вернуться к началу
wildwind



Зарегистрирован: 03.02.2004
Сообщения: 268
Откуда: Москва

СообщениеДобавлено: Пт Фев 20 2004 21:19    Заголовок сообщения: Ответить с цитатой

Толком объясни, че надо-то и зачем.
Не нравится процедура - переделай ее в функцию. Но о том, чтобы делать INSERT в результат функции, забудь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Сб Фев 21 2004 08:02    Заголовок сообщения: Ответить с цитатой

А не проще выгружать результат работы процедуры в отдельную таблицу, и потом обьеденяй на здоровье.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Shkval
Гость





СообщениеДобавлено: Сб Фев 21 2004 21:55    Заголовок сообщения: Ответить с цитатой

cerber писал(а):
А не проще выгружать результат работы процедуры в отдельную таблицу, и потом обьеденяй на здоровье.



Возможно, именно это и есть решение проблемы. Обьясни, пожалуйста, как это сделать (я имею ввиду, выгрузить результат работы процедуры в отдельную таблицу)?
Вернуться к началу
Shkval
Гость





СообщениеДобавлено: Сб Фев 21 2004 22:28    Заголовок сообщения: Ответить с цитатой

wildwind писал(а):
Толком объясни, че надо-то и зачем.


Дело в том, что запрос к БД, который выполняется внутри процедуры, не является статическим, я формирую его динамически (в зависимости от значений параметров процедуры) как строку типа NVARCHAR(N) и выполняю при помощи процедуры sp_executesql (такой изврат приходится делать из-за особенностей предметной области, которые долго обьяснять). А затем таблицу, являющуюся результатом работы моей процедуры, необходимо будет объединять с другими таблицами (по типу INNER JOIN). Почему я немогу загнать все JOIN-ы в динамически формируемый запрос? Потому что такой запрос не единственный - их много, они однотипные; при этом формировать каждый из них динамически очень не хотелось бы, поэтому выделили наиболее общую часть всех однотипных запросов и решили запихнуть ее в хранимую процедуру, а результат уже join-ить с оставшимися индивидуальными таблицами.

wildwind писал(а):
Не нравится процедура - переделай ее в функцию.


Вот в этом то и заключается вопрос. Как запихнуть результат работы процедуры sp_executesql (ЭТО ПРОЦЕДУРА, А НЕ ФУНКЦИЯ Sad - я писал в чем проблема в начале темы) в таблицу и затем вернуть наружу из моей функции?
Вернуться к началу
cerber



Зарегистрирован: 19.12.2003
Сообщения: 296
Откуда: Казахстан, Актюбинск

СообщениеДобавлено: Пн Фев 23 2004 07:59    Заголовок сообщения: Ответить с цитатой

А структура возвращаемой таблицы постоянна?

Если постоянна то создаёшь таблицу(можно руками) и загоняешь туда данные, т.е. вычислил дату и ешё чего нибудь и insert'ом в таблицу.

Если не постоянна то в начале процедуры удаляешь таблицу и создаёшь её заново с нужной тебе структурой.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Hibernate
Гость





СообщениеДобавлено: Пн Фев 23 2004 13:05    Заголовок сообщения: Re: Хранимая процедура в MS SQL Server Ответить с цитатой

Shkval писал(а):

Вот в этом то и заключается вопрос. Как запихнуть результат работы процедуры sp_executesql (ЭТО ПРОЦЕДУРА, А НЕ ФУНКЦИЯ Sad - я писал в чем проблема в начале темы) в таблицу и затем вернуть наружу из моей функции?


Код:
CREATE PROCEDURE sp_Test AS
Insert Into #Temp1 (I_D) Values (10)
GO


Код:

create Table #Temp1(I_D Int)
DECLARE @d nVarChar(100)
SET @d = N'exec sp_Test'

EXECUTE sp_executesql  @d

Select * FROM #Temp1


а так не подойдет?
Вернуться к началу
Shkval
Гость





СообщениеДобавлено: Ср Фев 25 2004 18:05    Заголовок сообщения: Ответить с цитатой

Да, все работает Smile .
Всем спасибо.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...