powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Suspend в M$ SQL и еще кое что
9 сообщений из 9, страница 1 из 1
Suspend в M$ SQL и еще кое что
    #32201983
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,

вопрос по SQL Serverу, но имхо глупо его задавать в их форуме.

Какой у них аналог ibasовского for-selectа и suspendа?

Вот например, я там делаю в ХП какой-нибудь select - и, так понимаю, это сразу выводится в виде таблицы. А например, мне надо проходить по результатам выборки и делать suspend в зависимости от каких-то условий. Как там это делается?

Насколько я понял, можно результат выборки положить в курсор, а потом делать или не делать fetch. Правда, насколько я понял, опять же (пока к делу не приступил, читаю книгу (Мамаева)), на каждый fetch выскакивает отдельная таблица с одной строкой...

И еще. В интербейсе можно делать select from хп. А в SQL сервере что, обязательно делать EXEC, и хп будет выдавать по нескольку таблиц с результатами, чтоли? Че-то я пока не въеду, конечно и сам подумаю-почитаю, но мож кто сразу знает. Например, в ибейсе я бы просто делал

rs = stmt.executequery("select * from хп(тратата)")

.... потом еще вопрос допишу..
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32202041
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему же глупо.

Про fоr-select вы все правильно поняли.
Аналог suspend - записывать во временную таблицу.
fetch возвращает не таблицу из одной строки - а данные полей строки таблицы в ваши переменные
c = new ADODB.Command
c.Text = 'exec ...'
rs = c.Execute

а если охота select * from хп, то в SQK Server 2000 есть UDF.
Правда, у них полно ограничений
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32202126
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну глупо мне показалось, что sqlserverные знатоки про ибейс могут не знать...

А насчет fetch я так понял, там есть синтаксис, когда он раскладывает по переменным, и есть когда он строку выдает.

Артем, в вашем примере rs - это recordset? То есть все-таки fetch в хп возвращает рекордсет, а потом надо делать rs.nextrecordset, чтобы достать результат следующего fetchа?

Просто как раз от временной таблицы позволяет отказаться курсор, но курсора в хп нет в ибейсе. Однако в ибейсе можно в зависимости от каких-то условий не делать suspend, и я предположил это сымитировать, не делать fetch. Но он делает новый рекордсет.. или я что-то не въехал пока...
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32202157
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так подробно синтаксис fetch не изучал. Так что вы правы, скорее всего. (Книжка то у вас :)) )

Насчет recordset все верно, так и работает.

Насколько я помню IB, делая несколько suspend-ов, в конечном итоге на клиенте получали один рекодсет.

В SQL Server для получения одного конечного рекордсета результаты промежуточных fetch-ей складываются во временную таблицу, а потом по окончании обработки из временной таблицы select * на клиента.

Думаю, в IB механизм внутренний так-же работает. Результаты suspend-ов копятся где-то до окончания работы процедуры, а потом возвращаются клиенту.

А в SQL Server это делается руками. Ну что поделаешь, ну такая идеология.
Мне она неудобств не доставляет.
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32202421
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут мне еще сказали, что в MS SQL нельзя делать рекурсивные процедуры.

Я намылился сделать рекурсивный вызов процедуры, чтобы она кое-что проверяла, потом вызывала сама себя и по результатам делала или не делала суспенд (примерное изложение).

Мне кажется, что в ибейсе не складывается во временную таблицу, а сразу выдается наверх строка, как встретился суспенд. Таким образом, при рекурсивном вызове, делая или не делая суспенд, я отберу только нужные строки, не загружая сервер деланием большого кол-ва временный таблиц - каждый уровень вызова ХП отбросит (не засуспендит) свои строки. А в SQL сервере получится что надо будет сделать много врем. табл. :(
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32202485
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там (в ИБ) оно пакетами передаётся. Набрался пакет - послалось ...
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32202493
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold,
пакетами передается (верю ;) из сервера в клиент там на дельфи и т.п.
а если я в хп делаю селект к другой (или той же) хп, и это выглядит как

Код: plaintext
1.
2.
3.
4.
5.
6.
for select from хп do 
begin
  if тратата
    suspend
  else
    не suspend
end


то чего ей ждать, пока пакет наберется, чтобы потом пакетно сделать тысячу суспендов на более верхний уровень, где такая же хп ждет....
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32206417
Denis A.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в MSSQL можно и процедуры и функции делать рекурсивными.
...
Рейтинг: 0 / 0
Suspend в M$ SQL и еще кое что
    #32206607
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да я тоже думал, бред какой-то, как это нельзя, такая великая система...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Suspend в M$ SQL и еще кое что
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]