В итоге мы использовали комбинацию генерации скриптов SSMS для извлечения схемы и данных, а затем использовали наш собственный инструмент базы данных, который позволяет анализировать ключевые слова и заменять в скриптах на основе токенов. Это также гарантирует, что скрипты применяются только один раз.
Зачем?
- Нам необходимо поддерживать установку на SQL Server 2000, 2005 и 2008, и есть изменения в типах данных между версиями, например, 2005+ имеют nvarchar (max), тогда как 2000 поддерживает только ntext. Таким образом, наши сценарии используют токен и заменяют его на правильный тип на основе выбора базы данных.
- Для выполнения некоторых сценариев требуется период ожидания после выполнения, например, мы обнаружили, что если вы не подождали несколько секунд после создания новой базы данных с помощью сценария, SQL Server иногда может давать сбой (потому что у него не было времени для создания базы данных. files), когда он перешел к созданию таблиц и т. д.
- Мы хотели вести историю того, какие скрипты были выполнены и когда.
- Мы хотели, чтобы наш установщик Wix MSI мог указывать строку подключения и учетные данные, и нам нужен был способ передать их в скрипты, поэтому еще раз, используя токены и некоторую условную логику.
Пример сценария (отредактировано для краткости)
-- Sleep: 5
-- Sleep after creating database to allow file system to create db files
CREATE DATABASE [$Database$]
GO
EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
GO
USE [$Database$]
GO
IF '1'!='$IntegratedSecurity$'
BEGIN
CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
CREATE USER [$User$] FOR LOGIN [$Login$]
EXEC sp_addrolemember N'db_owner', N'$User$'
END
GO