В настоящее время у меня есть вызов sql, возвращая набор данных из базы данных MSSQL, и я хочу взять столбец от тех данных, и идентификатор возврата базировался от того столбца от базы данных ORACLE. Я могу сделать этого за один раз, но это требует множественных вызовов, я задаюсь вопросом, может ли это быть сделано с одним вызовом.
String sql=String.Format(@"Select DIST_NO
FROM DISTRICT
WHERE DIST_DESC = '{0}'", row.Table.Rows[0]["Op_Centre"].ToString());
Выше строка, которую я использую для возврата одного идентификатора за один раз. Я знаю эти {0}, может использоваться для форматирования значения в строку и возможно существует способ сделать это с таблицей данных.
Также для использования нескольких значений в, где пункт это было бы:
String sql=String.Format(@"Select DIST_NO
FROM DISTRICT
WHERE DIST_DESC in ('{0}')", row.Table.Rows[0] ["Op_Centre"].ToString());
Хотя я понимаю, что все это может быть сделано, я задаюсь вопросом, существует ли простой способ добавить, что все это к sql представляет в виде строки в одном вызове.
Поскольку я пишу это, я понимаю, что мог распасться на части, строка затем просто добавляют, что каждая строка оценивает строке SQL в "ГДЕ DIST_DESC В (" пункт...
Мне все еще любопытно видеть, существует ли иначе, хотя, и потому что кто-то еще может столкнуться с этой проблемой, я отправлю решение, если я разрабатываю тот.
Заранее спасибо.
Наиболее независимый от РСУБД подход, который вы могли бы сделать, - это создать временную таблицу. Затем просто запросите: выберите * из района, где находится dist_desc (выберите dist_desc из temp_table)
В Oracle есть решение http://forums.oracle.com/forums/thread.jspa?threadID= 930372 , но у меня в коробке нет Oracle, поэтому я не могу попробовать, как он будет работать в .NET.
Пробовали это в Postgresql http://fxjr.blogspot.com/2009/05/npgsql-tips-using-in-queries-with.html , имеют очень удобную поддержку для сравнения значения с list
Если вы выберете метод динамических запросов, попробуйте следующее:
String sql=String.Format(@"Select DIST_NO
FROM DISTRICT
WHERE DIST_DESC IN ({0})",
string.Join( ",",
ds.Tables[0].Select()
.Select(r => "'" + (string)r["Op_Centre"] + "'").ToArray() ) // string.Join
); // string.Format
K Я понимаю, что бессмысленно задавать вопрос, а потом самому на него отвечать, но задав вопрос, я понял ответ.
String sql = "Select DIST_NO FROM DISTRICT WHERE DIST_DESC in ('" +ds.Tables[0].Rows[0]["Op_Centre"].ToString()+"'";
for (int i = 1; i < ds.Tables[0].Rows.Count;i++ )
{ sql +=",'"+ds.Tables[0].Rows[i]["Op_Centre"].ToString()+"'";
} sql += ")";
Мне все еще интересно узнать, есть ли лучший способ...