Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Вниз
SQL: SELECT ... WHERE ID_Fld IN --->MyArray<--- ??? Найти похожие ветки
← →
Silver_ © (2004-01-23 13:37) [0]
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-а)
типа слишком длинный запрос или еще че нибудь
← →
Reindeer Moss Eater © (2004-01-23 13:44) [1]Словами: Надо выбрать записи, ID_Fld которых занесены в Array, который динамически заполняется в проге
Серверу передается запрос в виде текста.
Все массивы остаются в приложении.
Пройтись по массиву и сформировать строку
.... in (value1,value2,....,valueN)
← →
Курдль © (2004-01-23 13:47) [2]
> Пройтись по массиву и сформировать строку
> .... in (value1,value2,....,valueN)
Только не увлекаться, а то даже "Оракл" один раз на такое ругнулся типа "Ваш запрос непозволительно длинный!"
← →
Hint © (2004-01-23 13:48) [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:53) [4]Вариант первый из 3 будет существенно быстрей при многократном обращении к такому запросу. Я бы еще индекс на временную таблицу сделал.
← →
ZrenBy © (2004-02-20 16:13) [5]http://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.031 c