powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Туплю..... Помогите!!!
10 сообщений из 10, страница 1 из 1
Туплю..... Помогите!!!
    #32014296
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сидел раньше на Interbase... В свете новых событий надоть переходить MSSQL...
Это преамбула. А вот суть вопроса:
Есть кусок sp писанной в IB:
for
select n1, n2, n3
from Table
into :i1, :i2 ,:i3
do begin
<тута какой либо код>
suspend; //выдаем результат на гора
end

Подскажите как реализовываются подобные конструкции в MSSQL.
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014300
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаток 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-ом
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014314
Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как ни парадоксально, но
в данном случае не надо никаких курсоров.
SP, написанная в IB, возвращает клиенту не что иное,
как таблицу, поэтому в данном случае на MS SQL это будет
выглядеть так:

SELECT N1,N2,N3 FROM TABLE
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014317
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, Андрей. Как я понял имеется ввиду загнать значения полей в переменные, затем выполнить с ними какие - то действия и выдать клиенту. Вот тут важно какие именно действия? Если они допустимы прямо в SELECT, то, конечно, без всякого курсора. А если нет, то либо цикл, либо курсор, либо UDF. Так что <b><тута какой либо код><\b> - нужно знать какой именно?
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014318
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да нет, Андрей. Как я понял имеется ввиду загнать значения полей в переменные, затем выполнить с ними какие - то действия и выдать клиенту. Вот тут важно какие именно действия? Если они допустимы прямо в SELECT, то, конечно, без всякого курсора. А если нет, то либо цикл, либо курсор, либо UDF. Так что <b><тута какой либо код></b> - нужно знать какой именно?
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014322
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел совершенно прав - именно необходимо выполнить некие действия (в частности if...then, и все отсюда вытекающее), как ни крутил, SELECT'ом это не получается. Меня в принципе устраивал бы вариант с использованием курсоров, но есть одно но... Попробую обрисовать проблему поподробнее:
В sp писанной в IB я пробегался по всем записям НД, делал с ними чего надо и выдавал результат на гора, в клиенте (крапаю в Delphi) самый банальный вариант пользую Query(что-то типа select * from sp)+DataSource+DBgrid, ессно в gride вижу результат работы sp.
Сделав базу под MSSQL, изваял sp с использованием курсоров (все прекрасно), но Delphi+ADO (с ADO я работаю впервые)..... ADOQuery+DataSource+DBGrid ругается на Multiple recordset, в принципе понятно почему..., объясните мне пожалуйста где я туплю??? может необходим другой подход???
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014327
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что клиенту возвращается только первый из последовательных селектов, а все последующие вытаскивабтся на клиента дополнительными манипуляциями (в ADO методом .NextRecordset). Но вам не это нужно. На самом деле в селекте можно наворотить довольно сложные манипуляции, используя Case. Если это не выйдет, то в SQL2K можно прописать UDF и вставить ее в селект. UDF отработает для каждой записи, выдав нужные данные клиенту. И последний вариант, если ничего из вышепредложенного не прокатывает - работа со временной таблицей. Т.е. создается #table (иди в MSSQL2K @table), и либо внутри курсора, открытого по исходной таблице в нее вбиваются нужные данные, либо данные заливаются из исходной таблицы во временную и курсором упдейтятся по нужному алгоритму. А потом SELECT ... FROM #table - то что вернется клиенту.
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014336
Vitali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По-моему Glory прав. Существует и описан в документации стандартный проход по любой(!) выборке из нужной таблице через курсор, но при этом в теле цикла можно делать все, что душе угодно. Если нужно, то результат из SP можно вернуть через OUTPUT объявленный как TABLE
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014338
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Alex

Если вы спрашиваете про прямой перевод кода с Interbase на MSSQL - это одно,
если про оптимальное решение для какой-либо задачи на MSSQL - это другое.
В последнем случае объяснения типа
"В sp писанной в IB я пробегался по всем записям НД, делал с ними чего надо и выдавал результат на гора, в клиенте "
и
"необходимо выполнить некие действия (в частности if...then, и все отсюда вытекающее)"

совершенно неинформативны и трудно что-то вам советовать.
...
Рейтинг: 0 / 0
Туплю..... Помогите!!!
    #32014523
Alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо за помощь. Просто после IB не привык еще к гибкости TSQL.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Туплю..... Помогите!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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