|
|
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
Коллеги, вопрос по SQL Serverу, но имхо глупо его задавать в их форуме. Какой у них аналог ibasовского for-selectа и suspendа? Вот например, я там делаю в ХП какой-нибудь select - и, так понимаю, это сразу выводится в виде таблицы. А например, мне надо проходить по результатам выборки и делать suspend в зависимости от каких-то условий. Как там это делается? Насколько я понял, можно результат выборки положить в курсор, а потом делать или не делать fetch. Правда, насколько я понял, опять же (пока к делу не приступил, читаю книгу (Мамаева)), на каждый fetch выскакивает отдельная таблица с одной строкой... И еще. В интербейсе можно делать select from хп. А в SQL сервере что, обязательно делать EXEC, и хп будет выдавать по нескольку таблиц с результатами, чтоли? Че-то я пока не въеду, конечно и сам подумаю-почитаю, но мож кто сразу знает. Например, в ибейсе я бы просто делал rs = stmt.executequery("select * from хп(тратата)") .... потом еще вопрос допишу.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 14:10 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
Ну почему же глупо. Про fоr-select вы все правильно поняли. Аналог suspend - записывать во временную таблицу. fetch возвращает не таблицу из одной строки - а данные полей строки таблицы в ваши переменные c = new ADODB.Command c.Text = 'exec ...' rs = c.Execute а если охота select * from хп, то в SQK Server 2000 есть UDF. Правда, у них полно ограничений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 14:30 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
А, ну глупо мне показалось, что sqlserverные знатоки про ибейс могут не знать... А насчет fetch я так понял, там есть синтаксис, когда он раскладывает по переменным, и есть когда он строку выдает. Артем, в вашем примере rs - это recordset? То есть все-таки fetch в хп возвращает рекордсет, а потом надо делать rs.nextrecordset, чтобы достать результат следующего fetchа? Просто как раз от временной таблицы позволяет отказаться курсор, но курсора в хп нет в ибейсе. Однако в ибейсе можно в зависимости от каких-то условий не делать suspend, и я предположил это сымитировать, не делать fetch. Но он делает новый рекордсет.. или я что-то не въехал пока... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:10 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
Так подробно синтаксис fetch не изучал. Так что вы правы, скорее всего. (Книжка то у вас :)) ) Насчет recordset все верно, так и работает. Насколько я помню IB, делая несколько suspend-ов, в конечном итоге на клиенте получали один рекодсет. В SQL Server для получения одного конечного рекордсета результаты промежуточных fetch-ей складываются во временную таблицу, а потом по окончании обработки из временной таблицы select * на клиента. Думаю, в IB механизм внутренний так-же работает. Результаты suspend-ов копятся где-то до окончания работы процедуры, а потом возвращаются клиенту. А в SQL Server это делается руками. Ну что поделаешь, ну такая идеология. Мне она неудобств не доставляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 15:26 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
Тут мне еще сказали, что в MS SQL нельзя делать рекурсивные процедуры. Я намылился сделать рекурсивный вызов процедуры, чтобы она кое-что проверяла, потом вызывала сама себя и по результатам делала или не делала суспенд (примерное изложение). Мне кажется, что в ибейсе не складывается во временную таблицу, а сразу выдается наверх строка, как встретился суспенд. Таким образом, при рекурсивном вызове, делая или не делая суспенд, я отберу только нужные строки, не загружая сервер деланием большого кол-ва временный таблиц - каждый уровень вызова ХП отбросит (не засуспендит) свои строки. А в SQL сервере получится что надо будет сделать много врем. табл. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 17:37 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
Там (в ИБ) оно пакетами передаётся. Набрался пакет - послалось ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 18:26 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
Gold, пакетами передается (верю ;) из сервера в клиент там на дельфи и т.п. а если я в хп делаю селект к другой (или той же) хп, и это выглядит как Код: plaintext 1. 2. 3. 4. 5. 6. то чего ей ждать, пока пакет наберется, чтобы потом пакетно сделать тысячу суспендов на более верхний уровень, где такая же хп ждет.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2003, 18:41 |
|
||
|
Suspend в M$ SQL и еще кое что
|
|||
|---|---|---|---|
|
#18+
в MSSQL можно и процедуры и функции делать рекурсивными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2003, 21:03 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32202041&tid=1580251]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
459ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 780ms |

| 0 / 0 |
