Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.09.2001, 14:20
|
|||
|---|---|---|---|
Туплю..... Помогите!!! |
|||
|
#18+
Сидел раньше на Interbase... В свете новых событий надоть переходить MSSQL... Это преамбула. А вот суть вопроса: Есть кусок sp писанной в IB: for select n1, n2, n3 from Table into :i1, :i2 ,:i3 do begin <тута какой либо код> suspend; //выдаем результат на гора end Подскажите как реализовываются подобные конструкции в MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.09.2001, 15:17
|
|||
|---|---|---|---|
Туплю..... Помогите!!! |
|||
|
#18+
Я не знаток Interbase, но мне ваш пример до боли напоминает цикл по всем записям запроса. Если это так, то MSSQL это реализуется следующим образом USE pubs GO -- Declare the variables to store the values returned by FETCH. DECLARE @au_lname varchar(40), @au_fname varchar(20) DECLARE authors_cursor CURSOR FOR SELECT au_lname, au_fname FROM authors WHERE au_lname LIKE "B%" ORDER BY au_lname, au_fname OPEN authors_cursor -- Perform the first fetch and store the values in variables. -- Note: The variables are in the same order as the columns -- in the SELECT statement. FETCH NEXT FROM authors_cursor INTO @au_lname, @au_fname -- Check @@FETCH_STATUS to see if there are any more rows to fetch. WHILE @@FETCH_STATUS = 0 BEGIN -- Concatenate and display the current values in the variables. PRINT "Author: " + @au_fname + " " + @au_lname -- This is executed as long as the previous fetch succeeds. FETCH NEXT FROM authors_cursor INTO @au_lname, @au_fname END CLOSE authors_cursor DEALLOCATE authors_cursor GO Но поверьте, что использование курсоров в MSSQL не есть хорошо с точки зрения производительности. Лучше пересмотреть исходный код для получения того же результата одним SELECT-ом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 02:44
|
|||
|---|---|---|---|
|
|||
Туплю..... Помогите!!! |
|||
|
#18+
Как ни парадоксально, но в данном случае не надо никаких курсоров. SP, написанная в IB, возвращает клиенту не что иное, как таблицу, поэтому в данном случае на MS SQL это будет выглядеть так: SELECT N1,N2,N3 FROM TABLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 03:47
|
|||
|---|---|---|---|
|
|||
Туплю..... Помогите!!! |
|||
|
#18+
Да нет, Андрей. Как я понял имеется ввиду загнать значения полей в переменные, затем выполнить с ними какие - то действия и выдать клиенту. Вот тут важно какие именно действия? Если они допустимы прямо в SELECT, то, конечно, без всякого курсора. А если нет, то либо цикл, либо курсор, либо UDF. Так что <b><тута какой либо код><\b> - нужно знать какой именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 03:48
|
|||
|---|---|---|---|
|
|||
Туплю..... Помогите!!! |
|||
|
#18+
Да нет, Андрей. Как я понял имеется ввиду загнать значения полей в переменные, затем выполнить с ними какие - то действия и выдать клиенту. Вот тут важно какие именно действия? Если они допустимы прямо в SELECT, то, конечно, без всякого курсора. А если нет, то либо цикл, либо курсор, либо UDF. Так что <b><тута какой либо код></b> - нужно знать какой именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 05:05
|
|||
|---|---|---|---|
Туплю..... Помогите!!! |
|||
|
#18+
Павел совершенно прав - именно необходимо выполнить некие действия (в частности if...then, и все отсюда вытекающее), как ни крутил, SELECT'ом это не получается. Меня в принципе устраивал бы вариант с использованием курсоров, но есть одно но... Попробую обрисовать проблему поподробнее: В sp писанной в IB я пробегался по всем записям НД, делал с ними чего надо и выдавал результат на гора, в клиенте (крапаю в Delphi) самый банальный вариант пользую Query(что-то типа select * from sp)+DataSource+DBgrid, ессно в gride вижу результат работы sp. Сделав базу под MSSQL, изваял sp с использованием курсоров (все прекрасно), но Delphi+ADO (с ADO я работаю впервые)..... ADOQuery+DataSource+DBGrid ругается на Multiple recordset, в принципе понятно почему..., объясните мне пожалуйста где я туплю??? может необходим другой подход??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 05:56
|
|||
|---|---|---|---|
|
|||
Туплю..... Помогите!!! |
|||
|
#18+
Дело в том, что клиенту возвращается только первый из последовательных селектов, а все последующие вытаскивабтся на клиента дополнительными манипуляциями (в ADO методом .NextRecordset). Но вам не это нужно. На самом деле в селекте можно наворотить довольно сложные манипуляции, используя Case. Если это не выйдет, то в SQL2K можно прописать UDF и вставить ее в селект. UDF отработает для каждой записи, выдав нужные данные клиенту. И последний вариант, если ничего из вышепредложенного не прокатывает - работа со временной таблицей. Т.е. создается #table (иди в MSSQL2K @table), и либо внутри курсора, открытого по исходной таблице в нее вбиваются нужные данные, либо данные заливаются из исходной таблицы во временную и курсором упдейтятся по нужному алгоритму. А потом SELECT ... FROM #table - то что вернется клиенту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 07:19
|
|||
|---|---|---|---|
|
|||
Туплю..... Помогите!!! |
|||
|
#18+
По-моему Glory прав. Существует и описан в документации стандартный проход по любой(!) выборке из нужной таблице через курсор, но при этом в теле цикла можно делать все, что душе угодно. Если нужно, то результат из SP можно вернуть через OUTPUT объявленный как TABLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.09.2001, 07:31
|
|||
|---|---|---|---|
Туплю..... Помогите!!! |
|||
|
#18+
2Alex Если вы спрашиваете про прямой перевод кода с Interbase на MSSQL - это одно, если про оптимальное решение для какой-либо задачи на MSSQL - это другое. В последнем случае объяснения типа "В sp писанной в IB я пробегался по всем записям НД, делал с ними чего надо и выдавал результат на гора, в клиенте " и "необходимо выполнить некие действия (в частности if...then, и все отсюда вытекающее)" совершенно неинформативны и трудно что-то вам советовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1825456]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 340ms |

| 0 / 0 |
