Выберите значение IN DataSet - PullRequest
0 голосов
/ 30 ноября 2011

Есть ли способ использовать DataSet в качестве значения IN?

Например, у меня есть запрос, который загружает DataSet с опциями, которые пользователь может выбирать при выполнении своей работы. Проблема в том, что запрос, который загружает DataSet, очень длинный и трудный (выборки и объединения таблиц внутри других выборок, другие объединения таблиц и т. Д. И т. Д. И т. Д.), Поэтому я хочу иметь возможность заполнять DataSet ровно один раз и просто ссылаться на DataSet при выполнении других запросов.

Теперь я заставил его работать, вызывая каждую строку, получая значение из строки и добавляя его в запрос.

//GetAvailableOptions is just the long and complicated query
//Code simplified just for example sake
DataSet ds = GetAvailableOptions();
string str_qry = "select from TestFile where (";
foreach(DataRow dr in ds.Tables[0].Rows)
{
    string str_test = dr[0].ToString();
    str_qry += dr[0].ToString() + " or ";
}

Итак, итоговый запрос выглядит так:

select from TestFile where (TestField = 'A' or TestField = 'B' or ... TestField = 'Z') 

Но мне было интересно, не смогу ли я сделать это быстрее, выполнив следующее:

DataSet ds = GetAvailableOptions(); 
string str_qry = "select from TestFile where TestField in " + ds.Tables[0].Columns[0];

Но я не могу заставить его работать. Это возможно? Моя логика звучит? Имя столбца, на который я пытаюсь ссылаться из DataSet, совпадает с полем, которое я пытаюсь загрузить (в данном примере, TestField).

Еще один, я думаю, более субъективный вопрос: насколько быстрее (если вообще?) Будет, если это сработает? Или даже с объединениями и несколькими запросами, будет ли быстрее вытащить оттуда вместо циклического перехода и добавления? Или, может быть, есть другой способ, о котором я не думал? Может кто-нибудь поделиться своим опытом?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

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

1 голос
/ 30 ноября 2011

Это звучит как что-то лучше, чем хранимая процедура.Я предполагаю, что создаваемый вами DataSet заполняется из хранимой процедуры?

Кроме того, тип динамического SQL, который вы генерируете, не рекомендуется по ряду причин, главной из которых является безопасность, которую вы открываете сами.до внедрения SQL.

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