Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.24;
Скачать: CL | DM;

Вниз

Динамическое формирование списка значений для выборки   Найти похожие ветки 

 
harisma   (2008-02-28 16:10) [0]

Необходимо написать простой запрос (являющийся частью другого скрипта), возвращающий некоторый набор данных. Ну, что-то вроде такого:


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


Проблема в том, что этот <values set> должен формироваться предварительно в самом скрипте, тоесть передать его извне в виде параметра из дельфийского кода нельзя. А вот как это сделать в скрипте - может кто подскажет.
Заранее спасибо.


 
Reindeer Moss Eater ©   (2008-02-28 16:12) [1]

каки везде. конкатенацией строк.


 
Ega23 ©   (2008-02-28 16:13) [2]

declare @aSQL varchar(1000)
Set @aSQL="Select * from Table"
exec(@aSQL)


Ну а в свою переменную в динамике можешь чё хошь напихать. Глваное за размерность varchar не вылези


 
harisma   (2008-02-28 16:18) [3]

Да, забыл сказать, что поле recid имеет тип char(16)

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

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


 
Ega23 ©   (2008-02-28 16:19) [4]

"""


 
harisma   (2008-02-28 16:22) [5]


> Ega23 ©

Не понял...


 
Виталий Панасенко(дом)   (2008-02-28 16:22) [6]


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

Лучше QuotedStr


 
Sergey13 ©   (2008-02-28 16:23) [7]

> [0] harisma   (28.02.08 16:10)

Заполни значениями временную таблицу и соедини с ней основную.


 
Reindeer Moss Eater ©   (2008-02-28 16:23) [8]

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

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


 
sniknik ©   (2008-02-28 16:24) [9]

> Лучше QuotedStr
формирование в скрипте, в сервере mssql... там тоже есть? видимо отстал от жизни.


 
Виталий Панасенко(дом)   (2008-02-28 16:26) [10]


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

В коде программы заключи в кавычки.. в чем проблема? а почему
> Проблема в том, что этот <values set> должен формироваться
> предварительно в самом скрипте, тоесть передать его извне
> в виде параметра из дельфийского кода нельзя.
?


 
Ega23 ©   (2008-02-28 16:27) [11]


> Лучше QuotedStr


В TSQL появилось QuotedStr?????
Иншалла!!!


 
harisma   (2008-02-28 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]

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

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

А никакой


 
Виталий Панасенко(дом)   (2008-02-28 16:29) [13]


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

Не понял просто вопроса автора..Либо понял не так как ты...Я недавно спрашивал, как объединить удаленный MS SQL и мои данные из FoxPro.. в итоге в проге выбрал что нужно из БД Foxа, сформировал скрипт в проге и все работает... ну, теряю 3-5 сек(при первом подключении к фоксу)..:-)


 
sniknik ©   (2008-02-28 16:30) [14]

> Так нельзя.
а как/что можно? и зачем? огласите весь список... а то получается разговор слепого с глухим.


 
harisma   (2008-02-28 16:38) [15]


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


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

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

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


 
Виталий Панасенко(дом)   (2008-02-28 16:40) [16]

мне вот это не понятно

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

- кто/что его формирует ? само по себе как-то ?


 
harisma   (2008-02-28 16:42) [17]


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


Он формируется из курсора.


 
sniknik ©   (2008-02-28 16:46) [18]

> Он формируется из курсора.
?
это же готовый список для
Sergey13 ©   (28.02.08 16:23) [7]
> Заполни значениями временную таблицу и соедини с ней основную.
даже создавать временную и заполнять не надо, вместо курсора запрос и соединяй...


 
Виталий Панасенко(дом)   (2008-02-28 16:47) [19]

Это я уже понял...Действительно, не пашет в таком виде.Проверил на стандартной БД Northwind...


 
Anatoly Podgoretsky ©   (2008-02-28 16:47) [20]

> harisma  (28.02.2008 16:38:15)  [15]

Ты уверен, что у тебя есть запись со значением F09A7082701AA440,F091FEB302FBA040",F081008347F5A240


 
Виталий Панасенко(дом)   (2008-02-28 16:51) [21]


> 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
)


 
harisma   (2008-02-28 16:52) [22]


> 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"
Вот, как их выбрать?


 
sniknik ©   (2008-02-28 16:56) [23]

Виталий Панасенко(дом)   (28.02.08 16:51) [21]
> Проверил на СеверномВетре  .... Если подставить значения - выбирает
посмотри что советовали в [2] и найди 10 отличий...


 
Виталий Панасенко(дом)   (2008-02-28 16:57) [24]

Я так подозреваю, что выборка считает это одним значением..
потому как этот вариант отработал
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
)


 
Anatoly Podgoretsky ©   (2008-02-28 16:57) [25]

> harisma  (28.02.2008 16:52:22)  [22]

Динамический запрос, а не динамические параметры.


 
Виталий Панасенко(дом)   (2008-02-28 16:59) [26]


> sniknik ©   (28.02.08 16:56) [23]
>
> Виталий Панасенко(дом)   (28.02.08 16:51) [21]
> > Проверил на СеверномВетре  .... Если подставить значения
> - выбирает
> посмотри что советовали в [2] и найди 10 отличий...
>

Извиняюсь, не обратил внимая...Грипп достал...:-).. Мне, вообще суть задачи не понятна... В целом..


 
Виталий Панасенко(дом)   (2008-02-28 17:04) [27]

Да, отработало "на ура"..
declare @S varchar(1000)
set @S="select * from categories where categoryname in(""Beverages"",
""Condiments"")"
exec (@S)


 
Anatoly Podgoretsky ©   (2008-02-28 19:09) [28]

> Виталий Панасенко(дом)  (28.02.2008 16:57:24)  [24]

Это не значение, а параметр, и при том один.


 
harisma   (2008-02-28 20:13) [29]

В общем, у меня получилось. Согласно совета [2]. :)
Всем, кто участвовал - спасибо


 
ЮЮ ©   (2008-02-29 04:14) [30]

А почему бы в первом скрипте сразу не возвращать нужный НД вместо формирования запроса с IN?



Страницы: 1 вся ветка

Текущий архив: 2008.08.24;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.02 c
1-1197265455
Vladimir888
2007-12-10 08:44
2008.08.24
Получить значки дисководов


2-1216289835
NJ
2008-07-17 14:17
2008.08.24
DLL


2-1216556223
MixPix
2008-07-20 16:17
2008.08.24
вставить TTreeNode в дерево


3-1204540359
webpauk
2008-03-03 13:32
2008.08.24
Выборка из 2 таблиц


2-1216671014
Igor M.
2008-07-22 00:10
2008.08.24
Данные флешки