![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL: SELECT ... WHERE ID_Fld IN --->MyArray<--- ??? [D6, D7]
Silver_ © (2004-01-23 13:37:00)
SELECT Fld1, Fld2
FROM MyTable_2
WHERE ID_Fld IN Dinamic_Array_of_Integer
Словами: Надо выбрать записи, ID_Fldкоторых занесены в Array, который динамически заполняется в проге
Текст запроса может быть составлен динамически или через параметр, значения не имеет
динамически составлять WHERE условие типа
WHERE ID_Fld = 1 OR ID_Fld = 4 OR ID_Fld = 7 OR ID_Fld = 3 ...
не годится, так как значений может быть бог знает сколько много и могу нарваться на ругань от сервера (Access-а)
типа слишком длинный запрос или еще че нибудь
ZrenBy (2004-02-20 16:13:00) [1]http://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml
Тимохов (2004-01-23 13:53:00) [2]Вариант первый из 3 будет существенно быстрей при многократном обращении к такому запросу. Я бы еще индекс на временную таблицу сделал.
Hint (2004-01-23 13:48:00) [3]Все для MSSQL 2000
1. Заполнять temp table в программе нужными значениями, а потом уже SELECT ... WHERE ID_Fls IN (SELECT ID_Fld From temp_table).
2. Формировать с программе строку типа "(0, 1, 2)", передавать в Stored Procedure, текст которы примерно такой:
CREATE STORED PROCEDURE usp_Example
@dyn_arr varchar(N) -- n это ваше, скока надо
AS
EXEC('SELECT ... WHERE ID_Fld IN ' + @dy_arr)
go
Курдль (2004-01-23 13:47:00) [4]
> Пройтись по массиву и сформировать строку
> .... in (value1,value2,....,valueN)
Только не увлекаться, а то даже "Оракл" один раз на такое ругнулся типа "Ваш запрос непозволительно длинный!"
Reindeer Moss Eater (2004-01-23 13:44:00) [5]Словами: Надо выбрать записи, ID_Fld которых занесены в Array, который динамически заполняется в проге
Серверу передается запрос в виде текста.
Все массивы остаются в приложении.
Пройтись по массиву и сформировать строку
.... in (value1,value2,....,valueN)