Поле SELECT, если оно существует во всех таблицах БД
У меня есть БД SQL Server с более чем 100 таблицами. Многие, но не все, имеют колонку под названием ins_date
который используется для хранения даты, когда каждая запись была вставлена в БД.
Я хотел бы получить последнюю (максимальную) дату вставки для каждой таблицы в моей БД. Я немного повозился с sp_MSforeachtable
что кажется достаточно хорошим, чтобы перебрать все таблицы.
Проблема, с которой я сталкиваюсь: мои запросы будут возвращать ошибку, когда они сталкиваются с таблицей, которая не имеет ins_date
колонка. Что я могу использовать вместе с sp_MSforeachtable
, чтобы получить информацию только из таблиц, которые имеют ins_date
и просто игнорировать или возвращать как NULL другие таблицы?
2 ответа
Вы можете заключить запрос в @command1
с оператором if. Что-то вроде этого:
if exists(select 1 from INFORMATION_SCHEMA.columns where COLUMN_NAME = 'ins_date' and TABLE_NAME='?')
Вы можете попробовать этот код для проверки нулевой ситуации для таблицы
string kyt = "SELECT * from sp_MSforeachtable where yourcondition=@yourcondition";
SqlCommand comm = new SqlCommand(kyt, con);
con.Open();
comm.Parameters.AddWithValue(@yourcondition,"valueofyourcondition");
SqlDataAdapter da = new SqlDataAdapter(comm);
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read())
{
dr["ins_date"].ToString();
if (dr["ins_date"] != DBNull.Value)
{