Запросы в SQL (обычные и к хранимым процедурам) #300128


#0 by Shutov
Есть объект для подключения к базе MS SQL:     ... собственно подключенный к базе. Теперь нужно выполнить запрос MS SQL. Для этого делаю: И далее два варианта кода выполнения запроса и получения данных: Далее перебираю результат для первого случая:         И для второго :         Первый вариант использую для обычных запросов, а второй для запросов с хранимыми процедурами MS SQL.     Подскажите, чем эти варианты отличаются и можно ли прийти к единому способу решения для любых запросов SQL?     Еще момент такой, что делает NextRecordset? ( - не совсем понятно, аналог MoveNext?).
#1 by sapphire
почитай
#2 by Shutov
Что конкретно? Там в основном по 7-ке.
#3 by Регистратор
моя твая непонимай откуда взялись ТаблицаДанных и ТаблицаДанных2 полтергейст?
#4 by shuhard
NextRecordset нужен тогда, когда в XP выполняються несколько запросов.
#5 by sapphire
читай внимательно,
#6 by sapphire
не "несколько несколько выполняються запросов", а когда результат возвращает несколько наборов записей, вообщето Microsoft назвала так метод для дебилов...
#7 by Регистратор
+ если ТаблицаДанных и ТаблицаДанных2  это рекордсеты то разницы как они получены нет никакой. не нужен т.к. там и так оно где надо в 2       ТаблицаДанных2.MoveNext; // <--- возможно процедура возвращает служебную информацию (типа сет каунт он остался) и ее тупо пропускают
#8 by Shutov
Эти таблицы - просто RSet. А зачем результат возвращается несколькими наборами данных?
#9 by sapphire
например читать exec sp_helpdb 'tempdb'
#10 by Shutov
Правильно ли понимаю, что второй код обрабатывает статистические сообщения в ходе выполнения процедуры типа "(4 row(s) affected)"?
#11 by DmitrO
Почти правильно понимаешь. Это не статистические сообщения, это результаты выполнения DML инструкций. Код получения результатов целиком зависит от запроса, в т.ч. и от кода вызываемых им хранимых процедур. А правильно это так: каждая инструкция в запросе к серверу по отношению к клиенту может либо: 1.сформировать результат в виде набора данных (набора записей) (собственно recordset); (например инструкции типа select); 2.сформировать результат в виде количества обработанных строк (rowcount); (например инструкции DML типа insert, update, delete); 3.не сформировать никакого результата; (например set, declare) 4.сформировать несколько результатов 1-го или 2-го типа; (например execute sp_foo, если в ХП sp_foo есть несколько инструкций select и/или insert, delete и т.п.). Инструкция set nocount on - подавляет формирование результата 2-го типа. Действует на scope (контекст выполнения), кажется, следует уточнить в BOL. Результаты отправляются на клиента последовательно, по ходу выполнения запроса, и могут быть получены только последовательно. NextRecordset это метод, который какраз переводит состояние объекта к получению следующего результата. Так что все зависит от запроса.
#12 by DmitrO
Правильно написанные процедуры и скрипты лишних результатов не возвращают, правильно написанный код получения результатов принимает все необходимые результаты.
#13 by перцептрон
кто знает Postgre поддерживает хранимые процедуры???
#14 by sapphire
да
#15 by vde69
да, и MySQL то-же
#16 by перцептрон
(14, 15) классно, спасибо.
#17 by Shutov
Вопрос в том, кто умеет писать на Postgre запросы? )
#18 by vde69
они должны быть обычными T-SQL (ведь стандарт один), за исключением расширений и мелочей всяких
#19 by перцептрон
дык, это ж стандарт! Или Postgre изобрел велисопед?
#20 by Shutov
Большое спасибо! Картина на данный вопрос действительно прояснилась!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С