переменные в ХП как поля рекордсета

ao1973
Дата: 17.12.2002 16:30:13
Всем добрый день!
в ХП часто возникает задача типа

Select col2,(какое-то очень сложное выражение) as col1,
col1+col2 as col3 .....
и т.д.

в ИБ все было отлично

FOR SELECT COL2 FROM ...

BEGIN
COL1=(какое-то очень сложное выражение);
col3=(col1+col2);//можно добавить еще кучу полей,в том числе как результат ветвления процеудры
suspend; //возвращает все выражения как поля датасета
END

в MSSQL -е
конструкция типа
Select col2,(какое-то очень сложное выражение) as col1,
col1+col2 as col3 .....

не рабоает.
Проблему в даном случае можно легко обойти,но
в общем в ХП переменные и результаты вычислений возвращаются как
output параметры ,а не как поля рекордсета.Конечно существуют временные таблицы ,и куросры (кстати курсоры тоже определяются как селекты,нет возможности вставить сложные конструкции) но это не выход.
Неужели нет в MSSQL -е функционального аналога FOR SELECT DO ... suspend?
tygra
Дата: 17.12.2002 16:41:16
select @id as Number


Или не то? Тогда путево вопрос задай - чего надо
Glory
Дата: 17.12.2002 16:47:02
в MSSQL -е
конструкция типа
Select col2,(какое-то очень сложное выражение) as col1,
col1+col2 as col3 .....

не рабоает.


В MSSQL-е нужно так

Select col2, col1, col1+col2 as col3 .....
from
(Select col2,(какое-то очень сложное выражение) as col1 ..... ) AS a ...
alexeyvg
Дата: 17.12.2002 16:52:54
Я, к сожалению, не знаю ИБ, и мне трудно понять, что всё-таки требуется.
Почему в MSSQL-е конструкция типа
Select col2,(какое-то очень сложное выражение) as col1,
col1+col2 as col3 .....
невозможна? Как-же иначе писать?

Или имеется в виду что-то вроде построчных вызовов (обработчик на каждую строку рекордсета) - типа триггеров на строку?
Ну так MSSQL - это РСУБД, а не фокспро - он оперирует наборами данных, а не строками. Это надо учитывть при разработке. В MSSQL обычно сложная обработка данных делается передачей наборов в виде временных таблиц, менее сложная - в виде пользовательских ф-ций.

При переходе на какую-либо систему нужно её освоить, попрограммировать хотя-бы годик; что при переходе с MSSQL на ИБ, что наоборот .
SergSuper
Дата: 17.12.2002 16:54:13
2 ao1973
В MS многое чего не так, как в IB. То что Вы хотите сделать нельзя
ao1973
Дата: 17.12.2002 17:00:13
Вопрос простой
Как в ХП переменные и результаты СЛОЖНЫХ вычислений в теле процедуры возвратить как поля рекордсета ,а не как output параметры .
ao1973
Дата: 17.12.2002 17:07:29
"Или имеется в виду что-то вроде построчных вызовов (обработчик на каждую строку рекордсета) - типа триггеров на строку?
Ну так MSSQL - это РСУБД, а не фокспро - он оперирует наборами данных, а не строками."

1. ПРИЧЕМ ТУТ ФОКСПРО?

2.а тогда что такое FETCH INTO ?
ПО МОЕМУ ЭТО И ЕСТЬ "что-то вроде построчных вызовов "
только он работает на аутпут ,а мне нужно наоборот.

3. построчных вызовы как я знаю есть даже у оракла.
tygra
Дата: 17.12.2002 18:34:31
А что значит только он работает на аутпут ??????

Куда захочешь, туда и будет работать.

Ты бы лучше пример конкретный привел, что нужно посчитать и вывести - тогда может поймем
ao1973
Дата: 17.12.2002 19:23:53
помоему примеров достаточно но все же

db northwind
---------
ALTER PROCEDURE CustOrderHist @CustomerID nchar(5)
AS
SELECT [какое-то поле котрое надо вычислять 20 строчками кода используя конструкции WHILE ,BREAK, IF BEGIN END И т.д. алгоритм довольно сложный конструкциями CASE И COALASCE НЕ ВОЗМЕШЬ],ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID
AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID
GROUP BY ProductName

МОЖНО ПИСАТЬ УДФ и все такое
но я хочу это делать в тексте самой процедуры
причем результат зависит от полей в селекте
MiCe
Дата: 17.12.2002 19:38:54
напиши реальный пример из IB....
посмотрим как его можно решить ...
а то абстрактно както...