Я чувствую, что это может быть безумный вопрос, и если у кого-то есть лучшее представление о том, как это сделать, во что бы то ни стало, пожалуйста, дайте мне знать.
У меня есть проект .Net C #, который проверяет определенные таблицы на соответствие стандартам компании, которых они должны придерживаться. Таблицы могут быть на SQL Server или DB2. Когда таблица первоначально добавляется в программу, я собираю метаданные / информацию о таблице, используя операторы выбора либо из information_schema.columns
для sql, либо syscat.columns
для db2. Как только я получу эти данные, я сохраню их в таблице (назовем ее all_table_information
) на сервере sql, содержащей ту же информацию для каждой таблицы, которая проверяется в программе.
Если таблица является таблицей SQL, я могу выполнить этот запрос (конечно, ограничив его только столбцами из таблицы, которую я хочу):
insert into [all_table_information]
(table_id, column_name, data_type, max_char_length)
select table_id, column_name, data_type, character_maximum_length
from information_schema.columns
where ...restrict to needed table...
И затем выполните это в SqlCommand. Но если это таблица DB2, я должен выполнить этот запрос (снова ограниченный столбцами, которые мне нужны):
select tabschema, tabname, colname, typename, length
from syscat.columns
where ...restrict to needed table...
Затем возьмите DataReader с результатами и пройдитесь по нему, вставляя каждую строку, используя:
while (dr.Read())
{
insert into [all_table_information]
(table_id, column_name, data_type, max_char_length) values
(..."'" + dr["whatever"] + "', '" + ....)
...execute sql here...
}
dr.Close();
Делать это таким образом работает, но это медленно, поэтому мне просто интересно, есть ли еще способ сделать это в одном утверждении? Я знаю, что вы также можете сохранить информацию таблицы db2 в таблицу данных, но можете ли вы выполнить запрос непосредственно к таблице данных?
Спасибо,
Райан