Published on

September 22, 2009

Автоматизация экспорта данных и генерации скриптов в SQL Server

Как компания по разработке программного обеспечения, у вас может быть несколько экземпляров баз данных для различных сред, таких как разработка, QA, стейджинг и продакшн. В ходе жизненного цикла разработки разработчики часто вносят изменения в данные в базе данных разработки, которые затем необходимо продвигать в другие среды для тестирования и проверки.

Однако бывают случаи, когда исходный скрипт для данных отсутствует или обновления были сделаны напрямую в базе данных без обновления скрипта. В таких случаях становится необходимым автоматизировать процесс экспорта этих записей и генерации скриптов для развертывания.

В этой статье мы рассмотрим простой скрипт, который можно использовать для упрощения создания скриптов для записей, которые необходимо импортировать в другие базы данных с использованием объектной модели SQL-DMO (Distributed Management Objects) с помощью VBScript.

Решение и использование

Решение представляет собой VBScript, который выполняет SQL-запрос в целевой базе данных. Он выполняет следующие задачи:

  1. Входит в систему на целевом сервере/базе данных с использованием аутентификации Windows (может быть улучшено для использования SQL-логинов)
  2. Выполняет запрос для получения нужных записей (например, на основе определенного идентификатора или записей, созданных после определенной даты)
  3. Определяет целевую таблицу на основе запроса
  4. Определяет, какие поля должны быть экспортированы (с некоторыми исключениями, такими как идентификаторы, временные метки и вычисляемые поля)
  5. Создает оператор вставки или обновления для каждой записи
  6. Записывает скрипты в текстовый файл

Скрипт может быть выполнен из пакетного файла с использованием следующего синтаксиса:

WBScript 0g_exportRecord [servername] [database] [query] [filename] [command]

Например:

WBScript 0g_exportRecors devdb catalog "select * from setting where id in (102,103)" "c:\my files\setting.sql" 0

Поддерживаемые запросы

Скрипт поддерживает любое допустимое SQL-выражение без объединений. Идея заключается в том, чтобы создать скрипт данных из каждой отдельной таблицы и создать соответствующие операторы вставки/обновления для этой таблицы. Вот несколько примеров запросов, которые можно использовать:

Select * from [MY_TABLE] where id = 1 or id = 2
Select col1,col2,col3 from [MY_TABLE] where id in (1,2)
Select * from [MY_TABLE] (NOLOCK) where col2 like ('text%')
select * from [MY_TABLE] where created_date > '9/21/2009'

Скрипт состоит из главной функции и пяти вспомогательных функций. Главная функция проверяет аргументы, переданные скрипту, и подключается к базе данных с использованием объекта SQLDMO.Server. Затем он выполняет запрос и получает набор результатов с использованием объекта SQLDMO.QueryResults.

Скрипт определяет имя таблицы и столбцы, которые нужно игнорировать (например, идентификаторы, временные метки, вычисляемые поля) с использованием объекта SQLDMO.Database. Он создает оператор вставки/обновления, перебирая набор результатов и заменяя токены квадратных скобок фактическими значениями столбцов.

Наконец, скрипт записывает операторы в указанный файл, создавая новый файл или добавляя к существующему.

Заключение

Используя этот скрипт, вы можете автоматизировать процесс экспорта данных из одной базы данных SQL Server и генерации операторов вставки/обновления для развертывания в других средах. Это позволяет отслеживать изменения и включать их в процесс развертывания, исключая необходимость вручных обновлений или полагаясь на резервные копии SQL Server.

Ограничения и улучшения

В настоящее время скрипт не экспортирует идентификаторы, но эту функциональность можно добавить для оператора вставки. Кроме того, скрипт использует аутентификацию Windows и может быть улучшен для поддержки SQL-логинов. Его также можно дополнительно улучшить для чтения конфигурационного файла XML или SQL-таблицы для подключения к различным серверам/базам данных и выполнения нескольких запросов.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.