Точная настройка SQL-кода, вызываемого несколько раз - PullRequest
1 голос
/ 11 июня 2010

В настоящее время у меня есть SQL-запрос, который в настоящее время вызывается несколько раз, например так (псевдокод):

foreach(KeyValuePair kvp in someMapList)
{
    select col1 from table where col2 = kvp.key and col3 = kvp.value;
    //do some processing on the returned value
}

Очевидно, что приведенное выше может вызывать базу данных много раз, если это большой списокпар.

Может ли кто-нибудь придумать более эффективный фрагмент SQL, который мог бы по существу возвращать список конкретных значений, основанный на списке двух уникальных фрагментов информации, чтобы можно было выполнять массовую обработку?Одним из очевидных было бы создание большого фрагмента SQL с использованием OR, но это, вероятно, было бы совершенно неэффективно?

Спасибо

Carl

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

Предполагая, что вы застряли с шаблоном пары сущность-значение, лучше всего создать хранимую процедуру и передать строку ваших пар с разделителями, которую затем можно превратить во временную таблицу и выбрать, используя присоединиться или, если вы можете передать параметр таблицы, что было бы еще лучше.

Другой возможностью было бы вставить в рабочую таблицу какой-то уникальный идентификатор соединения для ваших значений, а затем присоединиться к этому.

В любом случае ваша цель состоит в том, чтобы иметь возможность выбирать данные с использованием метода на основе множеств, каким-либо образом вводя ваши пары в базу данных.

0 голосов
/ 11 июня 2010

Вставьте KeyValuePair в таблицу и используйте команду JOIN или (если c #)

from record in table
join key in someMap on record.col2 equals key.key && record.col3 equals key.keyvalue
select col1 //or some anonymous type or a DTO I do not know...

Это НАИБОЛЕЕ ЭФФЕКТИВНО: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...