Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Вниз

Получение данных из хранимой процедуры   Найти похожие ветки 

 
LineSoft ©   (2007-01-24 15:55) [0]

Всех приветствую!

Вопрос, в общем-то, простой.

Если в теле ХП пишем select, а затем выполняем запрос "exec ХП <параметры>", то в QA видим результаты.

Если пишем, как в FireBird "Select field1 as X, field2 as Y from ХП <...>" - MS этого не допускает. А я хочу изобразить что-то типа этого, т.к. результаты нужно не посмотреть в QA, а дальше использовать. Как этого добиться в MS?

Пока откладываю в резерв возможность записи в таблицу и select из нее (если есть возможность обойтись без лишней таблицы)


 
Ega23 ©   (2007-01-24 16:13) [1]

Только через промежуточную таблицу  :(

Как вариант:
1. Select ... into #tempTable from ...
2. Create table #tempTable (....)
   Insert into #tempTable (....) Select ... from ...
   В данном варианте ОБЯЗАТЕЛЬНО порядок полей и их типы в Insert и Select должны совпадать. Исключение - identity
   Иногда и аттрибуты (типа null/not null)
3. Declare @t table (.....)

Если рекурсивных вызовов в хп нет, то годятся все 3 варианта.
Иначе - первый и второй.


 
logic   (2007-01-24 16:17) [2]

Можно еще и cursor, в зависимости от реалий.


 
linesoft ©   (2007-01-24 16:30) [3]

Всем спасибо. Я это подозревал, но хотел убедиться.
Не хотелось плодить лишние объекты, но увы...
Стою перед выбором - добавить в чужую процедуру запись в свою табличку, или сделать свою копию процедуры для этого. В обоих случаях зависишь от авторов  - в первом могут переписать при обновлении. Во втором - может измениться логика. А предупредить забудут в обоих.
Вот и хотелось просто забрать данные


 
Ega23 ©   (2007-01-24 17:13) [4]

Ты можешь сделать Insert из процедуры. Это вариант №2.
1. Создаёшь таблицу с теми полями и теми типами данных, которые возвращает хп.
2. Делаешь Insert into Table exec s_....

Пример:


 -- Проверка на ARM
Create Table #Temp_CustomARM
(
  ObjID                int                            not null,
  ObjOwner             int                            null,
  ObjNam               varchar(64)                    not null
   default " ",
  ObjLab               varchar(64)                    not null
   default " ",
  ObjOrd               int                            not null,
  ObjMsk               tinyint                        not null,
  ObjNot               varchar(255)                   null,
  ObjStat              int                            not null
   default 0,
  LogAddr              int                            not null
   default 0,
  PhsAddr              int                            not null
   default 0,
  CompIPAddr           varchar(15)                    not null
   default "0.0.0.0",
  CompNetNam           varchar(64)                    not null
   default " ",
  ARMTypCod            int                            null
   default 0,
  ARMRoleID            int                            null
   default 0,
  ARMCurrAccID         int                            null
   default 0,
  ARMCurrViewCod       int                            null
   default 0,
  ARMDefViewCod        int                            null
   default 0,
 LogObjID       int               null
);

Insert into #Temp_CustomARM
  exec S_RTTIProc @ActNam="OBJECTSBYCLSID.SEL",
          @CLSGUID="08261195-1987-4EE2-81A0-94C80D2A3BA6";



Теперь в таблице #Temp_CustomARM содержится всё, что вернула S_RTTIProc с заданными параметрами


 
linesoft ©   (2007-01-24 18:49) [5]

Круто! Сейчас попробую. Если так получится, можно сделать обвязку - свою внешнюю процедуру.


 
User_Name   (2007-01-24 18:58) [6]

Можно сделать через функцию. MSSQL позволяет делать Select из функций.


 
linesoft ©   (2007-01-24 18:59) [7]

Не, мне надо имеющуюся процедуру использовать


 
User_Name   (2007-01-24 19:04) [8]

Ну если так, тогда конечно :)


 
linesoft ©   (2007-01-24 19:11) [9]

Ega23 ©   (24.01.07 17:13) [4] - спасибо! Это то, что надо.

Сделал так (таблица уже создалась, раньше):

CREATE      proc dbo.sp_GetCardInfo_out   @CardNum varchar(32)
as
 truncate table tmp_CardInfo
 insert into tmp_CardInfo
 exec dbo.sp_GetCardInfo  @CardNum
GO


 
Ega23 ©   (2007-01-25 09:27) [10]

Ну и хорошо. Успехов!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
3-1169454228
Егоров А.Н.
2007-01-22 11:23
2007.04.15
Выражение CASE в операторе SELECT


15-1174645519
Vlad Oshin
2007-03-23 13:25
2007.04.15
Delphi7()Demos()Football - кто-нибудь понял чего там делать надо?


15-1174238305
Real
2007-03-18 20:18
2007.04.15
Открыть звездочки отображаемые вместо пароля


2-1174678650
Селезин
2007-03-23 22:37
2007.04.15
Разделитель целой и дробной части числа


15-1174134395
ArtemESC
2007-03-17 15:26
2007.04.15
Супер-прога на Delphi...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский