Kami memilih untuk membuat skrip semuanya, dan itu mencakup semua prosedur tersimpan dan perubahan skema. Tidak ada alat wysiwyg, dan tidak diperlukan program 'sinkronisasi' yang mewah.
Perubahan skema mudah dilakukan, yang perlu Anda lakukan hanyalah membuat dan memelihara satu file untuk versi tersebut, termasuk semua perubahan skema dan data. Ini menjadi skrip konversi Anda dari versi x ke x+1. Anda kemudian dapat menjalankannya terhadap cadangan produksi dan mengintegrasikannya ke dalam 'build harian' Anda untuk memverifikasi bahwa itu berfungsi tanpa kesalahan. Perhatikan bahwa penting untuk tidak mengubah atau menghapus skema yang sudah ditulis/memuat data sql karena Anda dapat merusak semua sql yang ditulis nanti.
-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO
-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO
Untuk prosedur tersimpan, kami memilih satu file per sproc, dan menggunakan formulir drop/create. Semua prosedur tersimpan dibuat ulang saat penerapan. Kelemahannya adalah jika perubahan dilakukan di luar kendali sumber, perubahan tersebut hilang. Pada saat yang sama, itu berlaku untuk kode apa pun, tetapi DBA'a Anda perlu menyadari hal ini. Ini benar-benar menghentikan orang-orang di luar tim yang mengacaukan prosedur tersimpan Anda, karena perubahan mereka hilang dalam pemutakhiran.
Menggunakan Sql Server, sintaksnya terlihat seperti ini:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO
CREATE PROCEDURE [usp_MyProc]
(
@UserID INT
)
AS
SET NOCOUNT ON
-- stored procedure logic.
SET NOCOUNT OFF
GO
Satu-satunya yang tersisa untuk dilakukan adalah menulis program utilitas yang menyusun semua file individual dan membuat file baru dengan seluruh rangkaian pembaruan (sebagai satu skrip). Lakukan ini dengan terlebih dahulu menambahkan perubahan skema kemudian mengulang struktur direktori dan memasukkan semua file prosedur tersimpan.
Sebagai keuntungan dari scripting segalanya, Anda akan menjadi jauh lebih baik dalam membaca dan menulis SQL. Anda juga dapat membuat seluruh proses ini lebih rumit, tetapi ini adalah format dasar bagaimana mengontrol semua sql tanpa perangkat lunak khusus.
tambahan:Rick benar bahwa Anda akan kehilangan izin pada prosedur tersimpan dengan DROP/CREATE, jadi Anda mungkin perlu menulis skrip lain untuk mengaktifkan kembali izin tertentu. Skrip izin ini akan menjadi yang terakhir dijalankan. Pengalaman kami menemukan lebih banyak masalah dengan ALTER ayat DROP/CREATE semantik. YMMV