Форум: "Базы";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизВозврат набора данных из stored proc Найти похожие ветки
← →
deadbitch (2004-01-31 19:13) [0]Как вернуть в MSSQL из хранимой процедуры набор данных подобно тому как это делается в IB (через цикл и SUSPEND)? У меня есть книга MS SQL Server 2000/Е. Мамаев, но там о такой возможности ни слова. Разве такой возможности нет???
← →
vuk (2004-01-31 19:35) [1]Просто написать select. Без всяких выкрутасов.
← →
deadbitch (2004-01-31 20:07) [2]Хе. А мне так не катит. У меня идет выборка данных через курсор, по этим данным считаются суммы по столбцам из другой таблицы. И нады выдать на выходе набор данных где в строке - поле из табл. 1 и сумма для этого значения. Пока оно суется во временную таблицу и уже отуда селект, но это долго... :(
← →
vuk (2004-01-31 20:20) [3]to deadbitch:
>У меня идет выборка данных через курсор
А смысл использовать курсоры для выборок?
← →
deadbitch (2004-01-31 21:10) [4]
/* Запихивает в таблицу T_ProfileStrPN энергии по сечениям на производственные нужды */
/* mode = 1 - using @month and @year */
/* mode = 0 - using ONLY @year */
CREATE proc p_getStructureProfilesPNEnergy
@mode tinyint,
@month varchar(15),
@year int
as
>declare profiles cursor scroll local for
> select distinct [Profile] from T_StructureDistribution where
> ([Profile] <> NULL) and (len([Profile]) > 10) and >([Profile] LIKE "ПН%")
declare @profile1 varchar(100)
declare @energy bigint
delete from T_ProfileStrPN where (len([Profile]) >= 0)
open profiles
fetch first from profiles into @profile1
while (@@fetch_status = 0)
begin
set @energy = 0
if (len(@profile1) > 10) and (@profile1 <> NULL)
begin
if @mode = 1
select @energy = sum(Energy) from T_MonthCount where
([Month] LIKE @month) and ([Year] = @year) and
(ControlChannel_ID in (select ControlChannel_ID from T_StructureDistribution where [Profile] = @profile1))
else
select @energy = sum(Energy) from T_MonthCount where
([Year] = @year) and
(ControlChannel_ID in (select ControlChannel_ID from T_StructureDistribution where [Profile] = @profile1))
insert into T_ProfileStrPN ([Profile], Energy) values (@profile1, @energy)
end
fetch from profiles into @profile1
end
close profiles
deallocate profiles
GO
Здесь бы мне @energy и @profile1 и выдать бы как строку данных из процедуры, а не пихать в таблицу. Так можно сделать это как в IB или нет, вот в чем вопрос?
← →
vuk (2004-01-31 21:50) [5]На первый взгляд все проблемы решаются при помощи group by. И никаких временных таблиц и курсоров.
← →
deadbitch (2004-02-01 11:16) [6]Ладно, признаю ошибку, бо в MSSQL я новичок. Как-то раньше до group by не допер. Ну а теперь не пойму почему у меня не видно этого селекта. Вот процедура:
CREATE PROCEDURE p_getPN
AS
select distinct A.[Profile], sum(B.Energy)
from T_StructureDistribution A, T_MonthCount B
where (A.ControlChannel_ID = B.ControlChannel_ID) and
(A.[Profile] LIKE "ПН%") and
(B.[Month] LIKE "Январь") and
(B.[Year]=2004)
group by A.[Profile]
GO
Взял TADOStroredProc, к ней TDataSet, к нему - TDBGRid. Делаю .ExecProc - а грид пустой, хотя в Query Analyzer"e все пашет. В чем проблема?
← →
deadbitch (2004-02-01 12:00) [7]Черт, ведь там .Open есть для таких случаев. :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.03 c