Изменения DDL в SQL Server (имена столбцов, типы)
Мне нужно проверить изменения DDL, внесенные в базу данных. Эти изменения необходимо повторить во многих других базах данных позднее. Я обнаружил здесь, что можно включить триггеры DDL для отслеживания действий DDL, и это прекрасно работает для create table
а также drop table
операций, потому что триггер получает T-SQL, который был выполнен, и я могу с радостью сохранить его где-нибудь и позже просто выполнить на других серверах.
У меня проблема с alter
операции: когда имя столбца изменяется из Management Studio, создаваемое событие не содержит никакой информации о столбцах! Он просто говорит, что таблица была заблокирована... Более того, если много столбцов изменяются одновременно (скажем, столбец foo => oof, а также столбец bar => rab), событие вызывается только один раз!
Моим решением для бедняка было бы иметь таблицу для хранения структуры таблицы, которая будет изменена до и после операции изменения. Таким образом, я мог бы сравнить обе структуры и выяснить, что случилось с какими столбцами.
Но прежде чем я это сделал, мне было интересно, возможно ли сделать это, используя какую-то другую функцию из SQL Server, которую я пропустил, или, может быть, есть лучший способ. Как бы вы пошли об этом?
2 ответа
Есть продукт, предназначенный именно для этого (я его написал).
Он отслеживает сценарии, которые содержат изменения ddl, кто их написал и когда они влияют на производительность, и дает вам возможность легко скопировать их как один сценарий развертывания. Для того, что вы спросили, бесплатной версии достаточно.
http://www.seracode.com/
В SQL Server нет специальной функции, касающейся ваших потребностей. Вы можете использовать триггеры, но они требуют большого количества кодирования T-SQL для правильной работы. Быстрое решение - это сторонние инструменты, но они не бесплатны. Пожалуйста, посмотрите на этот ответ относительно сторонних инструментов /questions/22157232/kak-poluchit-vse-zhurnalyi-tranzaktsij-vstavit-obnovlenie-udalit-dlya-konkretnoj-tablitsyi-v-sql-server-2008/22157237#22157237