-
>Ega23 © (21.01.09 12:23) [16] >Через Exec. Динамический запрос, вобщем.
Типа при помощи кувалды и какой-то матери :(
>b z (21.01.09 14:16) [19] >Так я и говорю, что может отказаться от ее использования в пользу позрачности, скорости и т.д. >Ну в общем трудно судить не видя реалии, может и она не такая навороченная, может ее >переделать
Я же вроде подробно написал о том, что не хочется ДУБЛИРОВАТЬ процедуру функцией. Переделать ХП в ф-цию нельзя потому что она используется в бизнес логике и на клиентах скризь и рядом :) Навороченность не от того, что говнопрограммисты писали, а оттого, что сам по себе расчет достаточно сложный - стандарты такие, обусловленные спецификой отрасли. Да и вылизана эта ХП так, что оптимизировать особо уже некуда. Она, кстати весьма реактивная :)
>а может уже что-то из предложенного хватит (например sniknik © [8], оно отвергнуто? >почему?) ... да мало ли.
см. [9]
-
> Типа при помощи кувалды и какой-то матери :(
if exists (select * from sysobjects where id = object_id(N'[S_TestProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [S_TestProc]
GO
CREATE PROCEDURE S_TestProc
@Condition varchar(8000) = '1=1'
As
Set NoCount ON;
Create Table #temp (
uid int identity (1,1),
aName varchar(64)
);
insert into #temp (aName) values ('A1');
insert into #temp (aName) values ('A2');
insert into #temp (aName) values ('A3');
insert into #temp (aName) values ('A4');
insert into #temp (aName) values ('A5');
insert into #temp (aName) values ('A6');
insert into #temp (aName) values ('A7');
insert into #temp (aName) values ('A8');
insert into #temp (aName) values ('A9');
insert into #temp (aName) values ('A10');
insert into #temp (aName) values ('A11');
exec ('Select * from #temp where ' + @Condition);
return(0);
GO
-- S_TestProc @Condition='uid>5';
-
ганс, юзай мою методу, будет щастье.
-
> ганс, юзай мою методу, будет щастье.
XML - гуано, ini-файлы рулят
-
он позволяет обойтись без костылей
-
ini-файлы рулят
не. временные файлы интернета - вот кто рулит.
-
Спасибо. Похоже нет щастья на белом свете :( Будем утяжелять клиента
-
вот что бывает когда не любишь xml
-
> см. [9] не совсем понял написанное в [9] (читай совсем не понял), но увидел страшное слово "дублировать", а кто предлагал дублировать? там выполнение той самой процедуры, которая и так по твоим словам уже возвращает рекордсет... т.е. добавляется 3 строчки к sql пакету - создание временной таблицы, получение рекордсета из процедуры в нее, и удаление ее после, а до удаление вставляешь то что ты там хочешь с джойнами и вообще с чем хочешь. и утяжелением добавление в ADODataSet 3х строк (или даже 30ти) я бы не назвал, так, мелкая добавка.
-
>sniknik © (21.01.09 21:29) [28] >не совсем понял написанное в [9] (читай совсем не понял)
Значит [10] ;)
Ладно, всем спасибо
-
> Значит [10] ;) тогда можешь пожертвовав производительностью получить рекордсет из процедуры через OPENROWSET подключая ее к своей же базе как к внешней. это можно вставлять прям в запрос с джойном.
-
база pubs, там какаято процедура reptq1, при подключении к этой базе -> SELECT a.*
FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'123456', 'exec pubs.dbo.reptq1') AS a
-
> вот что бывает когда не любишь xml
Да кто его любит? Максимум его преимуществ перед ini - это хранение иерархических настроек.
ЗЫ: CSV рулит :-)
-
> Я же вроде подробно написал о том, что не хочется ДУБЛИРОВАТЬ > процедуру функцией. > Переделать ХП в ф-цию нельзя потому что она используется > в бизнес логике и на клиентах скризь и рядом :) > Навороченность не от того, что говнопрограммисты писали, > а оттого, что сам по себе расчет достаточно сложный - стандарты > такие, обусловленные спецификой отрасли. Да и вылизана эта > ХП так, что оптимизировать особо уже некуда. Она, кстати > весьма реактивная :)
> > В теле функции нельзя взывать процедуры
Сделай наоборот: функционал - в функции. В процедуре, "используемой скризь и рядом" останется SELECT * FROM <ProcName>
А на клиентах получишь желаемое: SELECT ... FROM <ProcName> p JOIN ... ON p.xxx = ... или SELECT ... FROM <ProcName> p WHERE p.xxc IN (...)
-
>Сделай наоборот: функционал - в функции. В процедуре, "используемой скризь и рядом" >останется SELECT * FROM <ProcName>
Мысль, конечно, хорошая, но ты знаешь, мне она тоже пришла в голову. Причем в самом начале. Но эта "навороченная" ХП в свою очередь использует еще несколько других ХП. Тоже не маленьких.. В общем ситуация когда дачный сортир пытаются перестроить в особняк :)
-
>Медвежонок Пятачок © (21.01.09 16:12) [22] >ганс, юзай мою методу, будет щастье.
Дадад, сразу как только с делфей пересяду на жабу, а мсскл поменяю на постгрес :)
|