-
Необходимо написать простой запрос (являющийся частью другого скрипта), возвращающий некоторый набор данных. Ну, что-то вроде такого:
select <somefields> from <sometable>
where recid in (<values set>).
Проблема в том, что этот <values set> должен формироваться предварительно в самом скрипте, тоесть передать его извне в виде параметра из дельфийского кода нельзя. А вот как это сделать в скрипте - может кто подскажет. Заранее спасибо.
-
каки везде. конкатенацией строк.
-
declare @aSQL varchar(1000)
Set @aSQL='Select * from Table'
exec(@aSQL) Ну а в свою переменную в динамике можешь чё хошь напихать. Глваное за размерность varchar не вылези
-
Да, забыл сказать, что поле recid имеет тип char(16) Это я понимаю, конкатенацией, но не получается. Может я что не так делаю? Покажите пожалуйста образец. Следует учитывать, что значения должны быть в кавычках!! То есть результирующий запрос должен получиться типа
select <somefields> from <sometable>
where recid in ('a', 'b', 'c', 'd' ...)
-
'''
-
> Ega23 ©
Не понял...
-
> Ega23 © (28.02.08 16:19) [4] > > '''
Лучше QuotedStr
-
> [0] harisma (28.02.08 16:10)
Заполни значениями временную таблицу и соедини с ней основную.
-
То есть результирующий запрос должен получиться типа
а какой типа получается?
-
> Лучше QuotedStr формирование в скрипте, в сервере mssql... там тоже есть? видимо отстал от жизни.
-
> harisma (28.02.08 16:22) [5] > > > > Ega23 © > > Не понял... >
В коде программы заключи в кавычки.. в чем проблема? а почему > Проблема в том, что этот <values set> должен формироваться > предварительно в самом скрипте, тоесть передать его извне > в виде параметра из дельфийского кода нельзя. ?
-
> Лучше QuotedStr
В TSQL появилось 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... там тоже есть? > видимо отстал от жизни. >
Не понял просто вопроса автора..Либо понял не так как ты...Я недавно спрашивал, как объединить удаленный MS SQL и мои данные из FoxPro.. в итоге в проге выбрал что нужно из БД Foxа, сформировал скрипт в проге и все работает... ну, теряю 3-5 сек(при первом подключении к фоксу)..:-)
-
> Так нельзя. а как/что можно? и зачем? огласите весь список... а то получается разговор слепого с глухим.
-
> В коде программы заключи в кавычки.. в чем проблема?
Не получается. Смотрите, я пишу вот так: declare @Str varchar(1000) set @Str = '''F09A7082701AA440''' + ',' + '''F091FEB302FBA040''' + ',' + '''F081008347F5A240''' но результат выполнения скрипта - пустое множество, хотя я точно знаю, что записи с такими значениями ЕСТЬ. Может все же я неправильно формирую значение @Str или неправильно его подставляю?
select <somefields> from <sometable>
where recid in (@Str)
?
-
мне вот это не понятно
> Проблема в том, что этот <values set> должен формироваться > предварительно в самом скрипте,
- кто/что его формирует ? само по себе как-то ?
-
> Виталий Панасенко(дом) (28.02.08 16:40) [16] > > мне вот это не понятно > > > Проблема в том, что этот <values set> должен формироваться > > предварительно в самом скрипте, > > - кто/что его формирует ? само по себе как-то ?
Он формируется из курсора.
-
> Он формируется из курсора. ? это же готовый список для Sergey13 © (28.02.08 16:23) [7] > Заполни значениями временную таблицу и соедини с ней основную. даже создавать временную и заполнять не надо, вместо курсора запрос и соединяй...
-
Это я уже понял...Действительно, не пашет в таком виде.Проверил на стандартной БД Northwind...
-
> harisma (28.02.2008 16:38:15) [15]
Ты уверен, что у тебя есть запись со значением F09A7082701AA440,F091FEB302FBA040',F081008347F5A240
-
> 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 © (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' Вот, как их выбрать?
-
Виталий Панасенко(дом) (28.02.08 16:51) [21] > Проверил на СеверномВетре .... Если подставить значения - выбирает посмотри что советовали в [2] и найди 10 отличий...
-
Я так подозреваю, что выборка считает это одним значением.. потому как этот вариант отработал 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
)
-
> harisma (28.02.2008 16:52:22) [22]
Динамический запрос, а не динамические параметры.
-
> sniknik © (28.02.08 16:56) [23] > > Виталий Панасенко(дом) (28.02.08 16:51) [21] > > Проверил на СеверномВетре .... Если подставить значения > - выбирает > посмотри что советовали в [2] и найди 10 отличий... >
Извиняюсь, не обратил внимая...Грипп достал...:-).. Мне, вообще суть задачи не понятна... В целом..
-
Да, отработало "на ура".. declare @S varchar(1000)
set @S='select * from categories where categoryname in(''Beverages'',
''Condiments'')'
exec (@S)
-
> Виталий Панасенко(дом) (28.02.2008 16:57:24) [24]
Это не значение, а параметр, и при том один.
-
В общем, у меня получилось. Согласно совета [2]. :) Всем, кто участвовал - спасибо
-
А почему бы в первом скрипте сразу не возвращать нужный НД вместо формирования запроса с IN?
|