Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.044 c
2-1216505792
Stan
2008-07-20 02:16
2008.08.24
Перевести unsigned в signed


15-1215454118
@!!ex
2008-07-07 22:08
2008.08.24
Запуск колладйера отложили?


15-1214988339
Dennis I. Komarov
2008-07-02 12:45
2008.08.24
У ICQ опять чегото поменяли?


15-1215335704
AndreyRus
2008-07-06 13:15
2008.08.24
Бесплатное хранилище архивов в Интернете.


15-1214913162
abhtr
2008-07-01 15:52
2008.08.24
Странности с набором кода





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский