Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Suspend в M$ SQL и еще кое что / 9 сообщений из 9, страница 1 из 1
08.07.2003, 14:10
    #32201983
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Suspend в M$ SQL и еще кое что
Коллеги,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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