*Rik* писал(а):с процедурой можно работать как с таблице (чтобы из процедуры отправить выходные данные на клиента используется команда SUSPEND для каждой строки данных). В FireBird это удобно сделано, не знаю как в MS, но в Postgres, чтобы вернуть данные в виде таблицы из функции, сперва нужно агрегатный тип объявлять, в FB удобнее..
В MS SQL просто пишете в тексте процедуры любой SELECT, и он является результатом процедуры. Причем можно сделать несколько селектов, тогда процедура выдаст несколько результатов сразу, правда далеко не все умеют это обрабатывать. Пользоваться с осторожностью, скажем тот же Delphi ADO, если после SELECT в процедуре встретился THROW ERROR, его не увидит, так как для него возвращенный результат - это уже успех. В общем SELECT лучше писать в самом конце процедуры.
Процедуру можно использовать в любом месте вместо селекта, но вот использовать ее как часть другого селекта, к сожалению нельзя (Не уверен правда насчет последних версий MS SQL).
То есть написать select * from dbo.Proc или select * from (exec dbo.Proc) или exec dbo.Proc order by 1 не получится. Единственный такой разрешенный синтаксис, насколько я знаю, insert into Tbl... exec dbo.Proc
Ну и есть еще table variables, правда в MS SQL 2005 передать их как параметр в процедуру было нельзя, в последних версиях вроде уже можно.
Добавлено спустя 3 минуты 53 секунды:Re: Кеширование TSQLQuery - как отключить?*Rik* писал(а):Да, так и есть.
А можно сделать так, чтобы такой INSERT генерировался автоматически на основе указанного в поле ProviderFlags pfRefreshOnInsert? Ну и заодно вычеркнуть это поле из INSERT-списка полей )))
Вообще была бы мечта - не надо было бы НИЧЕГО делать, кроме установки ProviderFlags у одного поля...
Добавлено спустя 3 минуты 27 секунд:Re: Кеширование TSQLQuery - как отключить?В сочетании с новшеством FB 30 (AUTOGENERATE BY DEFAULT) - не надо было бы писать триггеры и не надо было бы редактировать сгенерированные SQL, чтобы все работало как часы ))) Блин, неужто я такой ленивый? )))