Форум: "Базы";
Текущий архив: 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