Форум: "Базы";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
ВнизДинамическое формирование списка значений для выборки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.037 c