![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое формирование списка значений для выборки [D5, MSSQL]
harisma © (2008-02-28 16:10:00)Необходимо написать простой запрос (являющийся частью другого скрипта), возвращающий некоторый набор данных. Ну, что-то вроде такого:
select <somefields> from <sometable>
where recid in (<values set>).
Проблема в том, что этот <values set> должен формироваться предварительно в самом скрипте, тоесть передать его извне в виде параметра из дельфийского кода нельзя. А вот как это сделать в скрипте - может кто подскажет.
Заранее спасибо.
ЮЮ (2008-02-29 04:14:00) [1]А почему бы в первом скрипте сразу не возвращать нужный НД вместо формирования запроса с IN?
harisma (2008-02-28 20:13:00) [2]В общем, у меня получилось. Согласно совета [2]. :)
Всем, кто участвовал - спасибо
Anatoly Podgoretsky (2008-02-28 19:09:00) [3]> Виталий Панасенко(дом) (28.02.2008 16:57:24) [24]
Это не значение, а параметр, и при том один.
Виталий Панасенко(дом) (2008-02-28 17:04:00) [4]Да, отработало "на ура"..
declare @S varchar(1000)
set @S='select * from categories where categoryname in(''Beverages'',
''Condiments'')'
exec (@S)
Виталий Панасенко(дом) (2008-02-28 16:59:00) [5]
> sniknik © (28.02.08 16:56) [23]
>
> Виталий Панасенко(дом) (28.02.08 16:51) [21]
> > Проверил на СеверномВетре .... Если подставить значения
> - выбирает
> посмотри что советовали в [2] и найди 10 отличий...
>
Извиняюсь, не обратил внимая...Грипп достал...:-).. Мне, вообще суть задачи не понятна... В целом..
Anatoly Podgoretsky (2008-02-28 16:57:00) [6]> harisma (28.02.2008 16:52:22) [22]
Динамический запрос, а не динамические параметры.
Виталий Панасенко(дом) (2008-02-28 16:57:00) [7]Я так подозреваю, что выборка считает это одним значением..
потому как этот вариант отработал
declare @S nvarchar(1000)
set @S='Beverages'
/*Confections
Dairy Products
Grains/Cereals
Meat/Poultry
Produce
Seafood
*/
select @S
select * from categories
where categoryname in (@S
)
sniknik (2008-02-28 16:56:00) [8]Виталий Панасенко(дом) (28.02.08 16:51) [21]
> Проверил на СеверномВетре .... Если подставить значения - выбирает
посмотри что советовали в [2] и найди 10 отличий...
harisma (2008-02-28 16:52:00) [9]
> Anatoly Podgoretsky © (28.02.08 16:47) [20]
>
> > harisma (28.02.2008 16:38:15) [15]
>
> Ты уверен, что у тебя есть запись со значением F09A7082701AA440,
> F091FEB302FBA040',F081008347F5A240
Записи с recid = ''F09A7082701AA440',
'F091FEB302FBA040','F081008347F5A240'' нету, но есть записи с
recid = 'F09A7082701AA440'
recid = 'F091FEB302FBA040'
recid = 'F081008347F5A240'
Вот, как их выбрать?
Виталий Панасенко(дом) (2008-02-28 16:51:00) [10]
> Anatoly Podgoretsky © (28.02.08 16:47) [20]
>
> > harisma (28.02.2008 16:38:15) [15]
>
> Ты уверен, что у тебя есть запись со значением F09A7082701AA440,
> F091FEB302FBA040',F081008347F5A240
Проверил на СеверномВетре, print выдает что данные есть в переменной...Но выборка не пашет..Если подставить значения - выбирает
declare @S varchar(1000)
set @S='''Beverages'''+','+'''Condiments'''
/*Confections
Dairy Products
Grains/Cereals
Meat/Poultry
Produce
Seafood
*/
select @S
select * from categories
where categoryname in (@S
)
Anatoly Podgoretsky (2008-02-28 16:47:00) [11]> harisma (28.02.2008 16:38:15) [15]
Ты уверен, что у тебя есть запись со значением F09A7082701AA440,F091FEB302FBA040',F081008347F5A240
Виталий Панасенко(дом) (2008-02-28 16:47:00) [12]Это я уже понял...Действительно, не пашет в таком виде.Проверил на стандартной БД Northwind...
sniknik (2008-02-28 16:46:00) [13]> Он формируется из курсора.
?
это же готовый список для
Sergey13 © (28.02.08 16:23) [7]
> Заполни значениями временную таблицу и соедини с ней основную.
даже создавать временную и заполнять не надо, вместо курсора запрос и соединяй...
harisma (2008-02-28 16:42:00) [14]
> Виталий Панасенко(дом) (28.02.08 16:40) [16]
>
> мне вот это не понятно
>
> > Проблема в том, что этот <values set> должен формироваться
> > предварительно в самом скрипте,
>
> - кто/что его формирует ? само по себе как-то ?
Он формируется из курсора.
Виталий Панасенко(дом) (2008-02-28 16:40:00) [15]мне вот это не понятно
> Проблема в том, что этот <values set> должен формироваться
> предварительно в самом скрипте,
- кто/что его формирует ? само по себе как-то ?
harisma (2008-02-28 16:38:00) [16]
> В коде программы заключи в кавычки.. в чем проблема?
Не получается. Смотрите, я пишу вот так:
declare @Str varchar(1000)
set @Str = '''F09A7082701AA440''' + ',' + '''F091FEB302FBA040''' + ',' + '''F081008347F5A240'''
но результат выполнения скрипта - пустое множество, хотя я точно знаю, что записи с такими значениями ЕСТЬ.
Может все же я неправильно формирую значение @Str или неправильно его подставляю?
?
select <somefields> from <sometable>
where recid in (@Str)
sniknik (2008-02-28 16:30:00) [17]> Так нельзя.
а как/что можно? и зачем? огласите весь список... а то получается разговор слепого с глухим.
Виталий Панасенко(дом) (2008-02-28 16:29:00) [18]
> sniknik © (28.02.08 16:24) [9]
>
> > Лучше QuotedStr
> формирование в скрипте, в сервере mssql... там тоже есть?
> видимо отстал от жизни.
>
Не понял просто вопроса автора..Либо понял не так как ты...Я недавно спрашивал, как объединить удаленный MS SQL и мои данные из FoxPro.. в итоге в проге выбрал что нужно из БД Foxа, сформировал скрипт в проге и все работает... ну, теряю 3-5 сек(при первом подключении к фоксу)..:-)
harisma (2008-02-28 16:28:00) [19]
> Sergey13 © (28.02.08 16:23) [7]
>
> > [0] harisma (28.02.08 16:10)
>
> Заполни значениями временную таблицу и соедини с ней основную.
>
Так нельзя. Условия дальнейшего использования сформированного скрипта не позволяют
>Reindeer Moss Eater © (28.02.08 16:23) [8]
>То есть результирующий запрос должен получиться типа
>а какой типа получается?
А никакой
Ega23 (2008-02-28 16:27:00) [20]
> Лучше QuotedStr
В TSQL появилось QuotedStr?????
Иншалла!!!