Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Barkan1
Guest
Ещё один вопрос переползающего с Firebird на MS SQL server.

Привык в хранимых процедурах использовать циклы по выборкам:

FOR SELECT ...
FROM ...
INTO ...
DO BEGIN
  -- тута обработка цикла
END

А как в MS SQL это реализовать?
3 дек 09, 09:00    [8011823]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
А что Вы делаете в "цикле по выборке"?! Нужен ли вообще цикл?
3 дек 09, 09:12    [8011844]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Пробегающий
Guest
Типа как курсор, но лучше забыть про порочную практику циклов.
3 дек 09, 09:13    [8011847]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Так вот от
Barkan1
  -- тута обработка цикла
END
всё и зависит...
3 дек 09, 09:13    [8011849]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Barkan1
Guest
pkarklin,

В общих словах задача такая: определить остаток на заданную дату.
Примерно так:

FOR SELECT ...
FROM номенклатура JOIN текущий_остаток ...
INTO ...
DO BEGIN
   -- взять сумму передач из Таблицы 1 и отнять из текущего остатка
   -- взять сумму передач из Таблицы 2 и прибавить к текущего остатка
   -- и так далее, около 20 таблиц
   SUSPEND; -- вернуть рассчитанный остаток
END
3 дек 09, 09:21    [8011868]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
В общих словах


В общих словах ответ один - курсор. А если слова будут не общими, то можно будет посмотреть в сторону уходя от навигационого подхода.
3 дек 09, 09:23    [8011879]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
aleks2
Guest
pkarklin
автор
В общих словах


В общих словах ответ один - курсор. А если слова будут не общими, то можно будет посмотреть в сторону уходя от навигационого подхода.


Ответ неверен.
Правильный ответ: CTE.

PS. Но лучше бы без СТЕ и циклов...
3 дек 09, 09:27    [8011897]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
aleks2
Guest
Barkan1
pkarklin,

В общих словах задача такая: определить остаток на заданную дату.
Примерно так:

FOR SELECT ...
FROM номенклатура JOIN текущий_остаток ...
INTO ...
DO BEGIN
   -- взять сумму передач из Таблицы 1 и отнять из текущего остатка
   -- взять сумму передач из Таблицы 2 и прибавить к текущего остатка
   -- и так далее, около 20 таблиц
   SUSPEND; -- вернуть рассчитанный остаток
END


Хе-хе... вот страдалец

https://www.sql.ru/forum/actualthread.aspx?tid=715925
3 дек 09, 09:30    [8011904]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
aleks2
Ответ неверен.


Интересно, в какой его части?
3 дек 09, 09:32    [8011909]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Barkan1
Guest
aleks2,

Что такое СТЕ?

А как сделать процедуру, которую потом можно было бы использовать как таблицу?
Типа:

SELECT ... FROM Таблица JOIN Процедура() ...
или просто
SELECT ... FROM Процедура() ...

Вообще я в шоке от Transact-SQL. Ж:)
3 дек 09, 10:08    [8012057]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
А как сделать процедуру, которую потом можно было бы использовать как таблицу?


Надо делать не процедуру, а функцию.

автор
Вообще я в шоке от Transact-SQL. Ж:)


И давно Вы с ним знакомы? Совет, не пытайтеть в нем искать аналогов Firebird и использовать подходы последнего.
3 дек 09, 10:21    [8012143]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Barkan1
Guest
pkarklin

И давно Вы с ним знакомы? Совет, не пытайтеть в нем искать аналогов Firebird и использовать подходы последнего.


Четвёртый день пошёл!
У меня задача - сделать в MS SQL базу аналогичную той, что делал на Firebird.
С триггерами парился два дня, теперь с процедурами, вернее с функциями буду мудохаться!

А может Oracle идиологически ближе к Firebird?
У заказчика и Oracle есть, переключиться может на него, пока всё ещё только начинается. Ж:)
3 дек 09, 10:31    [8012197]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
У меня задача - сделать в MS SQL базу аналогичную той, что делал на Firebird.


Аналогичную по функционалу, не означает, аналогичную по реализации.

автор
У заказчика и Oracle есть, переключиться может на него, пока всё ещё только начинается. Ж:)


Может заказчику стоит "переключиться" на специалиста, хоть по MS SQL, хоть по Oracle, а то из

автор
Четвёртый день пошёл!


хорошее вряд-ли что получится.

автор
А может Oracle идиологически ближе к Firebird?


Гм... и даже не надейтесь...
3 дек 09, 10:58    [8012406]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Barkan1
Guest
pkarklin
Аналогичную по функционалу, не означает, аналогичную по реализации.

Может заказчику стоит "переключиться" на специалиста, хоть по MS SQL, хоть по Oracle, а то из

автор
Четвёртый день пошёл!


хорошее вряд-ли что получится.


Реализация действительно будет другая.
И даже не потому что это MS SQL.

А про остальное - тут вступает в силу местная специфика, понимаешь.
1. Заказчик, даже по меркам нашего Мухосранска, является малопривлекательным.
2. А потому "местные" спецы триггеров не используют и каскадное DELETE делают исключительно из приложений.
Вот такая картина, маслом.
3 дек 09, 11:20    [8012601]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
DVN
Member

Откуда: Minsk, Belarus
Сообщений: 184
pkarklin
Barkan1

А может Oracle идиологически ближе к Firebird?

Гм... и даже не надейтесь...

Немного не в тему (маленький флуд), но все же... К нам год назад пришел на SQL Server "Ораклист". Когда начал писать код, я был в шоке. Все на курсорах. Утверждал, что в Оракле "все быстрое" тока на курсорах, я даже хотел задать вопрос на оракловский форум, да махнул рукой и начал потиху перевоспитывать (вроде получается, но с большим скрипом). Да, совсем отклонился в сторону, так вот зашел в эту ветку и опять тот же вопрос с курсорами-циклами, тока по Firebird. Неужели у некоторых девелоперов такая "курсорная" религия, или эти сервера, все таки, заточены под быстрые курсоры-циклы. Отвечать не обязательно, но все же интересно.

ЗЫ. Не пинайте сильно. наверно этот вопрос надо было в тему сравнения серверов.
3 дек 09, 11:40    [8012816]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
aleks2
Guest
Barkan1
pkarklin
Аналогичную по функционалу, не означает, аналогичную по реализации.

Может заказчику стоит "переключиться" на специалиста, хоть по MS SQL, хоть по Oracle, а то из

автор
Четвёртый день пошёл!


хорошее вряд-ли что получится.


Реализация действительно будет другая.
И даже не потому что это MS SQL.

А про остальное - тут вступает в силу местная специфика, понимаешь.
1. Заказчик, даже по меркам нашего Мухосранска, является малопривлекательным.
2. А потому "местные" спецы триггеров не используют и каскадное DELETE делают исключительно из приложений.
Вот такая картина, маслом.


Панимаете, уважаемый Айвазовский, научить вас зараз ИДЕОЛОГИИ T-SQL, а уж тем паче привить вам ее в подкорку - малореальная задача.

Но привести DDL таблиц и запрос, который надо переделать с кратким разъяснением: чо он там делает то, ибо не все сильны в синтаксисе и семантике Firebird, вы могли бы.
Глядишь конкретный пример то вам могет и сделают... а вы учитесь.
3 дек 09, 11:47    [8012890]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
Barkan1
Guest
Всё, вопрос можно считать решённым.
Функции - как раз то что надо.
Без циклов тоже пока получается, возможно благодаря радикальному изменению структуры таблиц.

Однако не прощаюсь. Впереди много ещё интересного!
3 дек 09, 11:58    [8012988]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
aleks2
Guest
Barkan1
Всё, вопрос можно считать решённым.
Функции - как раз то что надо.
Без циклов тоже пока получается, возможно благодаря радикальному изменению структуры таблиц.

Однако не прощаюсь. Впереди много ещё интересного!

Изобразим из себя Нострадамуса.
Cледующий вопрос тредстартера будет: ПОЧЕМУ ЭТО МЕДЛЕННО РАБОТАЕТ?
3 дек 09, 12:04    [8013048]     Ответить | Цитировать Сообщить модератору
 Re: Чем заменить конструкцию FOR SELECT ... INTO ... DO ...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
Barkan1
"местные" спецы триггеров не используют и каскадное DELETE делают исключительно из приложений.
Ну, видите, хоть и "Мухосранск", а специалисты квалифицированные есть!
3 дек 09, 13:57    [8014145]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить