SQL ORACLE - Datatable в предложении where - PullRequest
1 голос
/ 12 мая 2010

В настоящее время у меня есть вызов sql, возвращающий набор данных из базы данных MSSQL, и я хочу взять столбец из этих данных и вернуть идентификаторы на основе этого столбца из базы данных ORACLE. Я могу сделать это по одному, но для этого требуется несколько вызовов, мне интересно, можно ли это сделать одним вызовом.

String sql=String.Format(@"Select DIST_NO
    FROM DISTRICT
    WHERE DIST_DESC = '{0}'", row.Table.Rows[0]["Op_Centre"].ToString());

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

Также для использования нескольких значений в предложении where это будет:

String sql=String.Format(@"Select DIST_NO
   FROM DISTRICT
   WHERE DIST_DESC in ('{0}')", row.Table.Rows[0] ["Op_Centre"].ToString());

Хотя я понимаю, что все это можно сделать, мне интересно, есть ли простой способ добавить все это в строку sql за один вызов?

Когда я пишу это, я понимаю, что могу разбить строку на разделы, а затем просто добавить каждое значение строки в строку SQL в предложении "WHERE DIST_DESC IN (" ...

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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Самый независимый от СУРБД подход, который вы можете сделать, - это создать временную таблицу. Тогда просто запрос: select * from district where dist_desc in (select dist_desc from 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, имеет очень плавную поддержку сравнения значений со списком

Если вы будете использовать метод динамических запросов, попробуйте это:

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
1 голос
/ 12 мая 2010

K Я понимаю, что бессмысленно задавать вопрос, а затем отвечать на него самостоятельно, но, задавая вопрос, я понял ответ.

String sql = "Выбрать DIST_NO ИЗ РАЙОНА ГДЕ DIST_DESC в ('" + ds.Tables [0] .Rows [0] ["Op_Centre"]. ToString () + "'";

для (int i = 1; i

{ sql + = ", '" + ds.Tables [0] .Rows [i] ["Op_Centre"]. ToString () + "'";

} sql + = ")";

Мне все еще интересно посмотреть, есть ли лучший способ, хотя ...

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