В итоге мы использовали комбинацию генерации скриптов SSMS для извлечения схемы и данных, а затем использовали наш собственный инструмент базы данных, который позволяет выполнять синтаксический анализ ключевых слов и замену токенов в скриптах. Это также гарантирует, что сценарии применяются только один раз.
Почему?
- Нам необходимо поддерживать установки на SQL Server 2000, 2005 и 2008, и между версиями происходят изменения в типах данных, например, 2005+ имеют nvarchar (max), тогда как 2000 поддерживает только ntext. Таким образом, наши скрипты используют токен и в зависимости от выбора db заменяются на правильный тип.
- Для выполнения некоторых сценариев требуется период ожидания после выполнения, например, Мы обнаружили, что если вы не подождете несколько секунд после создания новых баз данных с помощью сценария, SQL-сервер может иногда выходить из строя (поскольку у него не было времени для создания файлов db), когда он продолжал создавать таблицы и т. Д.
- Мы хотели сохранить историю того, какие сценарии были выполнены и когда.
- Мы хотели, чтобы наш установщик 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