Поле 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)
                                    {
Другие вопросы по тегам