Конференция "Базы" » Виртуальные таблицы в TSQL
 
  • MsGuns © (21.01.09 15:24) [20]
    >Ega23 ©   (21.01.09 12:23) [16]
    >Через Exec. Динамический запрос, вобщем.

     Типа при помощи кувалды и какой-то матери :(

    >b z   (21.01.09 14:16) [19]
    >Так я и говорю, что может отказаться от ее использования в пользу позрачности, скорости и т.д.
    >Ну в общем трудно судить не видя реалии, может и она не такая навороченная, может ее >переделать

     Я же вроде подробно написал о том, что не хочется ДУБЛИРОВАТЬ процедуру функцией.
    Переделать ХП в ф-цию нельзя потому что она используется в бизнес логике и на клиентах скризь и рядом :)
    Навороченность не от того, что говнопрограммисты писали, а оттого, что сам по себе расчет достаточно сложный - стандарты такие, обусловленные спецификой отрасли. Да и вылизана эта ХП так, что оптимизировать особо уже некуда. Она, кстати весьма реактивная :)

    >а может уже что-то из предложенного хватит (например sniknik © [8], оно отвергнуто? >почему?) ... да мало ли.

    см. [9]
  • Ega23 © (21.01.09 16:09) [21]

    >  Типа при помощи кувалды и какой-то матери :(



    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';

  • Медвежонок Пятачок © (21.01.09 16:12) [22]
    ганс, юзай мою методу, будет щастье.
  • Ega23 © (21.01.09 16:19) [23]

    > ганс, юзай мою методу, будет щастье.


    XML - гуано, ini-файлы рулят
  • Медвежонок Пятачок © (21.01.09 16:23) [24]
    он позволяет обойтись без костылей
  • Медвежонок Пятачок © (21.01.09 16:34) [25]
    ini-файлы рулят

    не. временные файлы интернета - вот кто рулит.
  • MsGuns © (21.01.09 21:06) [26]
    Спасибо. Похоже нет щастья на белом свете :(
    Будем утяжелять клиента
  • Медвежонок Пятачок © (21.01.09 21:11) [27]
    вот что бывает когда не любишь xml
  • sniknik © (21.01.09 21:29) [28]
    > см. [9]
    не совсем понял написанное в [9] (читай совсем не понял), но увидел страшное слово "дублировать", а кто предлагал дублировать? там выполнение той самой процедуры, которая и так по твоим словам уже возвращает рекордсет... т.е. добавляется 3 строчки к sql пакету - создание временной таблицы, получение рекордсета из процедуры в нее, и удаление ее после, а до удаление вставляешь то что ты там хочешь с джойнами и вообще с чем хочешь.
    и утяжелением добавление в ADODataSet 3х строк (или даже 30ти) я бы не назвал, так, мелкая добавка.
  • MsGuns © (21.01.09 23:53) [29]
    >sniknik ©   (21.01.09 21:29) [28]
    >не совсем понял написанное в [9] (читай совсем не понял)

    Значит [10] ;)

    Ладно, всем спасибо
  • sniknik © (22.01.09 00:32) [30]
    > Значит [10] ;)
    тогда можешь пожертвовав производительностью получить рекордсет из процедуры через OPENROWSET подключая ее к своей же базе как к внешней.
    это можно вставлять прям в запрос с джойном.
  • sniknik © (22.01.09 00:41) [31]
    база pubs, там какаято процедура reptq1, при подключении к этой базе ->

    SELECT a.*
    FROM OPENROWSET('SQLOLEDB','127.0.0.1';'sa';'123456', 'exec pubs.dbo.reptq1') AS a

  • tesseract © (22.01.09 00:45) [32]

    > вот что бывает когда не любишь xml


    Да кто его любит? Максимум его преимуществ перед  ini -  это хранение иерархических настроек.

    ЗЫ:    CSV  рулит :-)
  • ЮЮ © (22.01.09 03:24) [33]

    >  Я же вроде подробно написал о том, что не хочется ДУБЛИРОВАТЬ
    > процедуру функцией.
    > Переделать ХП в ф-цию нельзя потому что она используется
    > в бизнес логике и на клиентах скризь и рядом :)
    > Навороченность не от того, что говнопрограммисты писали,
    >  а оттого, что сам по себе расчет достаточно сложный - стандарты
    > такие, обусловленные спецификой отрасли. Да и вылизана эта
    > ХП так, что оптимизировать особо уже некуда. Она, кстати
    > весьма реактивная :)


    > > В теле функции нельзя взывать процедуры


    Сделай наоборот: функционал - в функции. В процедуре, "используемой скризь и рядом" останется SELECT * FROM <ProcName>

    А на клиентах получишь желаемое:
     SELECT ...
     FROM
       <ProcName> p
      JOIN ... ON p.xxx = ...
    или
     SELECT ...
     FROM
       <ProcName> p
     WHERE p.xxc IN (...)
  • MsGuns © (22.01.09 11:18) [34]
    >Сделай наоборот: функционал - в функции. В процедуре, "используемой скризь и рядом" >останется SELECT * FROM <ProcName>

    Мысль, конечно, хорошая, но ты знаешь, мне она тоже пришла в голову. Причем в самом начале.
    Но эта "навороченная" ХП в свою очередь использует еще несколько других ХП. Тоже не маленьких..
    В общем ситуация когда дачный сортир пытаются перестроить в особняк :)
  • MsGuns © (22.01.09 11:20) [35]
    >Медвежонок Пятачок ©   (21.01.09 16:12) [22]
    >ганс, юзай мою методу, будет щастье.

    Дадад, сразу как только с делфей пересяду на жабу, а мсскл поменяю на постгрес :)
 
Конференция "Базы" » Виртуальные таблицы в TSQL
Есть новые Нет новых   [134477   +40][b:0][p:0.001]