Kami akhirnya menggunakan kombinasi pembuatan skrip SSMS untuk mengekstrak skema dan data, dan kemudian menggunakan alat basis data kami sendiri yang memungkinkan penguraian kata kunci dan penggantian berbasis token dalam skrip. Ini juga memastikan skrip hanya diterapkan sekali.
Mengapa?
- Kita perlu mendukung penginstalan di SQL Server 2000, 2005 dan 2008, dan ada perubahan tipe data antar versi, misalnya 2005+ memiliki nvarchar (maks), sedangkan 2000 hanya mendukung ntext. Jadi skrip kami menggunakan token dan berdasarkan pilihan db diganti dengan jenis yang benar.
- Eksekusi beberapa skrip memerlukan waktu tunggu setelah eksekusi, misalnya Kami menemukan jika Anda tidak menunggu beberapa detik setelah membuat database baru melalui skrip, SQL Server terkadang gagal (karena tidak punya waktu untuk membuat db file) ketika melanjutkan untuk membuat tabel, dll.
- Kami ingin mempertahankan sejarah skrip apa yang dieksekusi dan kapan.
- Kami ingin mengizinkan penginstal MSI Wix kami untuk menentukan string koneksi dan kredensial, dan membutuhkan beberapa cara untuk meneruskan ini ke dalam skrip, jadi sekali lagi, menggunakan token dan beberapa logika bersyarat.
Contoh skrip (diedit agar singkat)
-- 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