Конференция "Базы" » Динамическое формирование списка значений для выборки [D5, MSSQL]
 
  • harisma (28.02.08 16:10) [0]
    Необходимо написать простой запрос (являющийся частью другого скрипта), возвращающий некоторый набор данных. Ну, что-то вроде такого:


    select <somefields> from <sometable>
    where recid in (<values set>).



    Проблема в том, что этот <values set> должен формироваться предварительно в самом скрипте, тоесть передать его извне в виде параметра из дельфийского кода нельзя. А вот как это сделать в скрипте - может кто подскажет.
    Заранее спасибо.
  • Reindeer Moss Eater © (28.02.08 16:12) [1]
    каки везде. конкатенацией строк.
  • Ega23 © (28.02.08 16:13) [2]
    declare @aSQL varchar(1000)
    Set @aSQL='Select * from Table'
    exec(@aSQL)



    Ну а в свою переменную в динамике можешь чё хошь напихать. Глваное за размерность varchar не вылези
  • harisma (28.02.08 16:18) [3]
    Да, забыл сказать, что поле recid имеет тип char(16)

    Это я понимаю, конкатенацией, но не получается. Может я что не так делаю?
    Покажите пожалуйста образец. Следует учитывать, что значения должны быть в кавычках!! То есть результирующий запрос должен получиться типа

    select <somefields> from <sometable>
    where recid in ('a', 'b', 'c', 'd' ...)

  • Ega23 © (28.02.08 16:19) [4]
    '''
  • harisma (28.02.08 16:22) [5]

    > Ega23 ©

    Не понял...
  • Виталий Панасенко(дом) (28.02.08 16:22) [6]

    > Ega23 ©   (28.02.08 16:19) [4]
    >
    > '''

    Лучше QuotedStr
  • Sergey13 © (28.02.08 16:23) [7]
    > [0] harisma   (28.02.08 16:10)

    Заполни значениями временную таблицу и соедини с ней основную.
  • Reindeer Moss Eater © (28.02.08 16:23) [8]
    То есть результирующий запрос должен получиться типа

    а какой типа получается?
  • sniknik © (28.02.08 16:24) [9]
    > Лучше QuotedStr
    формирование в скрипте, в сервере mssql... там тоже есть? видимо отстал от жизни.
  • Виталий Панасенко(дом) (28.02.08 16:26) [10]

    > harisma   (28.02.08 16:22) [5]
    >
    >
    > > Ega23 ©
    >
    > Не понял...
    >

    В коде программы заключи в кавычки.. в чем проблема? а почему
    > Проблема в том, что этот <values set> должен формироваться
    > предварительно в самом скрипте, тоесть передать его извне
    > в виде параметра из дельфийского кода нельзя.
    ?
  • Ega23 © (28.02.08 16:27) [11]

    > Лучше QuotedStr


    В TSQL появилось QuotedStr?????
    Иншалла!!!
  • harisma (28.02.08 16:28) [12]

    > Sergey13 ©   (28.02.08 16:23) [7]
    >
    > > [0] harisma   (28.02.08 16:10)
    >
    > Заполни значениями временную таблицу и соедини с ней основную.
    >

    Так нельзя. Условия дальнейшего использования сформированного скрипта не позволяют

    >Reindeer Moss Eater ©   (28.02.08 16:23) [8]

    >То есть результирующий запрос должен получиться типа

    >а какой типа получается?

    А никакой
  • Виталий Панасенко(дом) (28.02.08 16:29) [13]

    > sniknik ©   (28.02.08 16:24) [9]
    >
    > > Лучше QuotedStr
    > формирование в скрипте, в сервере mssql... там тоже есть?
    >  видимо отстал от жизни.
    >

    Не понял просто вопроса автора..Либо понял не так как ты...Я недавно спрашивал, как объединить удаленный MS SQL и мои данные из FoxPro.. в итоге в проге выбрал что нужно из БД Foxа, сформировал скрипт в проге и все работает... ну, теряю 3-5 сек(при первом подключении к фоксу)..:-)
  • sniknik © (28.02.08 16:30) [14]
    > Так нельзя.
    а как/что можно? и зачем? огласите весь список... а то получается разговор слепого с глухим.
  • harisma (28.02.08 16:38) [15]

    > В коде программы заключи в кавычки.. в чем проблема?


    Не получается. Смотрите, я пишу вот так:
    declare @Str varchar(1000)
    set @Str = '''F09A7082701AA440''' + ',' + '''F091FEB302FBA040''' + ',' + '''F081008347F5A240'''

    но результат выполнения скрипта - пустое множество, хотя я точно знаю, что записи с такими значениями ЕСТЬ.
    Может все же я неправильно формирую значение @Str или неправильно его подставляю?

    select <somefields> from <sometable>
    where recid in (@Str)

    ?
  • Виталий Панасенко(дом) (28.02.08 16:40) [16]
    мне вот это не понятно

    > Проблема в том, что этот <values set> должен формироваться
    > предварительно в самом скрипте,

    - кто/что его формирует ? само по себе как-то ?
  • harisma (28.02.08 16:42) [17]

    > Виталий Панасенко(дом)   (28.02.08 16:40) [16]
    >
    > мне вот это не понятно
    >
    > > Проблема в том, что этот <values set> должен формироваться
    > > предварительно в самом скрипте,
    >
    > - кто/что его формирует ? само по себе как-то ?


    Он формируется из курсора.
  • sniknik © (28.02.08 16:46) [18]
    > Он формируется из курсора.
    ?
    это же готовый список для
    Sergey13 ©   (28.02.08 16:23) [7]
    > Заполни значениями временную таблицу и соедини с ней основную.
    даже создавать временную и заполнять не надо, вместо курсора запрос и соединяй...
  • Виталий Панасенко(дом) (28.02.08 16:47) [19]
    Это я уже понял...Действительно, не пашет в таком виде.Проверил на стандартной БД Northwind...
 
Конференция "Базы" » Динамическое формирование списка значений для выборки [D5, MSSQL]
Есть новые Нет новых   [134431   +13][b:0][p:0.001]