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

Откуда:
Сообщений: 889
Такая ситуация:
Имеется сохраненная процедура, возвращающая данные несколькими селектами:
ALTER Procedure sp_blablabla
as 
begin
  ...
  select ... --recordset1
  select ... --recordset2
  select ... --recordset3
  select ... --recordset4
end

Структура у recordset1 одна, а у recordset2..recordset4 - другая.
Нужно получить объединение recordset2..recordset4 в табличном виде.
Как получить в табличном виде данные из процедуры, возвращающей 1 рекордсет, знаю.
Можно ли решить задачу, не переписывая процедуру?
23 мар 16, 09:56    [18967082]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли объединить рекордсеты, возвращаемые процедурой?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ivanra
Нужно получить объединение recordset2..recordset4 в табличном виде.

Получить где ? На сервере ? И наборы еще наверное все разные ?
23 мар 16, 10:10    [18967149]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли объединить рекордсеты, возвращаемые процедурой?  [new]
ivanra
Member

Откуда:
Сообщений: 889
Повторяю
Структура у recordset1 одна, а у recordset2..recordset4 - другая.
Нужно получить объединение recordset2..recordset4 в табличном виде.
recordset2..recordset4 - по структуре одинаковые.
насчет данных:
В конечном счете данные нужны на клиенте. Сейчас их принимают в программе vb.net таким образом:
  Dim conn As Connection
  Dim cmd As Command
  Dim rst As Recordset
...
  Set cmd = New Command
  cmd.ActiveConnection = conn
  cmd.CommandText = "sp_blablabla"
  cmd.CommandType = adCmdStoredProc
  Set rst = cmd.Execute ' первый рекордсет
  If rst.RecordCount > 0 Then
    ...
  End If
  Set rst = rst.NextRecordset()  ' следующие рекордсеты

Результаты работы процедуры понадобились в другой программе, в виде таблицы. Ни о каком бейсике там речи не идет. Данные нужно получить простым sql-выражением.
Так что изначально они должны быть объединены на сервере - скриптом, сохраненной процедурой, функцией - неважно.
Возможно?
23 мар 16, 10:36    [18967263]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли объединить рекордсеты, возвращаемые процедурой?  [new]
_djХомяГ
Guest
Возможно если создать клон процедуры и привести set'ы к единой одинаковой структуре
23 мар 16, 10:38    [18967269]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли объединить рекордсеты, возвращаемые процедурой?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ivanra
Структура у recordset1 одна, а у recordset2..recordset4 - другая.

На сервере ничего не получится
23 мар 16, 10:45    [18967281]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли объединить рекордсеты, возвращаемые процедурой?  [new]
xenix
Guest
автор
Нужно получить объединение recordset2..recordset4 в табличном виде

я бы привел все наборы к фиксированной структуруе путем добавления фиктивных столбцов. Что-то вроде такого
DECLARE @TABLE1 TABLE
(
  ID TINYINT NOT NULL,
  VALUE1 CHAR(20)NOT NULL
  
);
DECLARE @TABLE2 TABLE
(
  ID TINYINT NOT NULL,
  VALUE1 CHAR(20)NOT NULL,
  VALUE2 CHAR(20)NOT NULL
)
INSERT @TABLE1(ID,VALUE1)
 VALUES(1,'2650');

INSERT @TABLE2(ID,VALUE1,VALUE2)
 VALUES(1,'2650','980');

SELECT C.ID,C.VALUE1,''
FROM @TABLE1 C
UNION ALL
SELECT C1.ID,C1.VALUE1,C1.VALUE2
FROM @TABLE2 C1 
23 мар 16, 10:51    [18967295]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить