翻譯|使用教程|編輯:楊鵬連|2020-07-10 09:22:45.590|閱讀 379 次
概述:本文介紹了所有這些任務,并演示了使用SQL Compare可以實現的功能。在隨后的文章中,我將顯示任務槽到自動SQL Change Automation過程中。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Compare是一款比較和同步SQL Server數據庫結構的工具。現有超過150,000的數據庫管理員、開發人員和測試人員在使用它。當測試本地數據庫,暫存或激活遠程服務器的數據庫時,SQL Compare將分配數據庫的過程自動化。
將數據庫置于源代碼管理中
我們要做的下一件事是將當前版本的Pubs放入源代碼管理(GitHub)中。我只是使用SQL Compare來做到這一點(請參閱使用SQL Compare的追溯數據庫源控件),但是您可能更喜歡使用SQL Source Control。
將當前版本的Pubs數據庫設置為源,將新創建的GitHub目錄的Build子目錄設置為目標。
然后,我在version.json文件中添加相同的起始版本號“ 2.1.5” 。這是Pubs項目的整體版本(與數據庫構建版本相同),因此我們將文件放置在GitHub項目的基本文件夾中(使用自述文件)。
{ "$schema": "http://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "version": "2.1.5" }最后,在我們的開發服務器上建立一個開發數據庫。它從與當前版本相同開始。在開發過程中,您可以隨意隨意銷毀和重建該副本。您可以通過從源代碼構建新版本,然后填充當前版本的測試數據來創建此副本,或者如果它位于同一服務器上,則可以使用“殺死并填充”方法重復填充數據以進行測試。如果您經常執行此任務,則需要看一下 SQL Clone, 因為它使一切變得非常容易。
我們決定對我們的開發數據庫進行一些緊急更新。我們將只更新pub_info具有一些過時數據類型的表,以正確處理二進制徽標和一些Unicode信息。首先,我們嘗試使用SSMS的表設計器,但拒絕這樣做:
我們改為通過SQL代碼來完成此操作,如下所示:
ALTER TABLE dbo.pub_info ALTER COLUMN Logo varbinary(MAX) NULL; ALTER TABLE dbo.pub_info ALTER COLUMN PR_Info nvarchar(MAX) NULL;
當然,通常情況下,我們通常會對每個版本進行很多更改,但這僅說明了各個階段。和我們一起承擔。
經過大量測試(檢查),并檢查數據是否未更改,我們確定這是一個新版本,并將更新后的表放在源代碼管理中,如下所示:
在這種情況下,我們需要做的就是在自動生成的腳本中添加一個小陷阱,這意味著我們不會在錯誤的版本上執行代碼。
SET NUMERIC_ROUNDABORT OFF GO SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON GO SET XACT_ABORT ON GO SET TRANSACTION ISOLATION LEVEL Serializable GO BEGIN TRANSACTION; --inserted code Declare @version varchar(25); SELECT @version= Coalesce(Json_Value( ( SELECT Convert(NVARCHAR(3760), value) FROM sys.extended_properties AS EP WHERE major_id = 0 AND minor_id = 0 AND name = 'Database_Info'),'$[0].Version'),'that was not recorded'); IF @version <> '2.1.5' BEGIN RAISERROR ('The Target was at version %s, not the correct version (2.1.5)',16,1,@version) SET NOEXEC ON; END --end of inserted code GO IF @@ERROR <> 0 SET NOEXEC ON GO PRINT N'Altering [dbo].[pub_info]' GO IF @@ERROR <> 0 SET NOEXEC ON GO ALTER TABLE [dbo].[pub_info] ALTER COLUMN [logo] [varbinary] (max) NULL GO IF @@ERROR <> 0 SET NOEXEC ON GO ALTER TABLE [dbo].[pub_info] ALTER COLUMN [pr_info] [nvarchar] (max) COLLATE Latin1_General_CI_AS NULL GO IF @@ERROR <> 0 SET NOEXEC ON GO PRINT N'Creating extended properties' GO BEGIN TRY EXEC sp_addextendedproperty N'Database_Info', N'[{"Name":"Pubs","Version":"2.1.6","Description":"The Pubs (publishing) Database supports a fictitious bookshop.","Modified":"2020-05-15T13:30:11.697","by":"RED-GATE\\Tony.Davis"}]', NULL, NULL, NULL, NULL, NULL, NULL END TRY BEGIN CATCH DECLARE @msg nvarchar(max); DECLARE @severity int; DECLARE @state int; SELECT @msg = ERROR_MESSAGE(), @severity = ERROR_SEVERITY(), @state = ERROR_STATE(); RAISERROR(@msg, @severity, @state); SET NOEXEC ON END CATCH GO COMMIT TRANSACTION GO IF @@ERROR <> 0 SET NOEXEC ON GO -- This statement writes to the SQL Server Log so SQL Monitor can show this deployment. IF HAS_PERMS_BY_NAME(N'sys.xp_logevent', N'OBJECT', N'EXECUTE') = 1 BEGIN DECLARE @databaseName AS nvarchar(2048), @eventMessage AS nvarchar(2048) SET @databaseName = REPLACE(REPLACE(DB_NAME(), N'\', N'\\'), N'"', N'\"') SET @eventMessage = N'Redgate SQL Compare: { "deployment": { "description": "Redgate SQL Compare deployed to ' + @databaseName + N'", "database": "' + @databaseName + N'" }}' EXECUTE sys.xp_logevent 55000, @eventMessage END GO DECLARE @Success AS BIT SET @Success = 1 SET NOEXEC OFF IF (@Success = 1) PRINT 'The database update succeeded' ELSE BEGIN IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION PRINT 'The database update failed' END GO
我們以當前版本(2.1.5)為目標測試經過編輯的遷移腳本。如果一切順利,則它將目標的版本標記更新為新版本,因為比較的源已經擁有它。如果一切都不對,您將得到這個…
我們將當前版本與代表當前生產版本的參考版本進行比較(在本例中使用SQL數據比較),發現數據沒有變化,但是參考數據庫現在處于新版本。我們保存遷移腳本并在GitHub上更新項目版本號:
{ "$schema": "http://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "version": "2.1.6" }
最后,我們將包含新版本的構建和腳本的本地GitHub目錄推送到源代碼管理。
相關產品推薦:
SQL Prompt:SQL語法提示工具
SQL Toolbelt:Red Gate產品套包
SQL Monitor:SQL Server監控工具
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: