翻譯|使用教程|編輯:楊鵬連|2020-07-10 09:22:45.590|閱讀 379 次
概述:本文介紹了所有這些任務(wù),并演示了使用SQL Compare可以實(shí)現(xiàn)的功能。在隨后的文章中,我將顯示任務(wù)槽到自動SQL Change Automation過程中。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Compare是一款比較和同步SQL Server數(shù)據(jù)庫結(jié)構(gòu)的工具。現(xiàn)有超過150,000的數(shù)據(jù)庫管理員、開發(fā)人員和測試人員在使用它。當(dāng)測試本地?cái)?shù)據(jù)庫,暫存或激活遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫時(shí),SQL Compare將分配數(shù)據(jù)庫的過程自動化。
將數(shù)據(jù)庫置于源代碼管理中
我們要做的下一件事是將當(dāng)前版本的Pubs放入源代碼管理(GitHub)中。我只是使用SQL Compare來做到這一點(diǎn)(請參閱使用SQL Compare的追溯數(shù)據(jù)庫源控件),但是您可能更喜歡使用SQL Source Control。
將當(dāng)前版本的Pubs數(shù)據(jù)庫設(shè)置為源,將新創(chuàng)建的GitHub目錄的Build子目錄設(shè)置為目標(biāo)。
然后,我在version.json文件中添加相同的起始版本號“ 2.1.5” 。這是Pubs項(xiàng)目的整體版本(與數(shù)據(jù)庫構(gòu)建版本相同),因此我們將文件放置在GitHub項(xiàng)目的基本文件夾中(使用自述文件)。
{ "$schema": "http://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "version": "2.1.5" }最后,在我們的開發(fā)服務(wù)器上建立一個(gè)開發(fā)數(shù)據(jù)庫。它從與當(dāng)前版本相同開始。在開發(fā)過程中,您可以隨意隨意銷毀和重建該副本。您可以通過從源代碼構(gòu)建新版本,然后填充當(dāng)前版本的測試數(shù)據(jù)來創(chuàng)建此副本,或者如果它位于同一服務(wù)器上,則可以使用“殺死并填充”方法重復(fù)填充數(shù)據(jù)以進(jìn)行測試。如果您經(jīng)常執(zhí)行此任務(wù),則需要看一下 SQL Clone, 因?yàn)樗挂磺凶兊梅浅H菀住?/span>
我們決定對我們的開發(fā)數(shù)據(jù)庫進(jìn)行一些緊急更新。我們將只更新pub_info具有一些過時(shí)數(shù)據(jù)類型的表,以正確處理二進(jìn)制徽標(biāo)和一些Unicode信息。首先,我們嘗試使用SSMS的表設(shè)計(jì)器,但拒絕這樣做:
我們改為通過SQL代碼來完成此操作,如下所示:
ALTER TABLE dbo.pub_info ALTER COLUMN Logo varbinary(MAX) NULL; ALTER TABLE dbo.pub_info ALTER COLUMN PR_Info nvarchar(MAX) NULL;
當(dāng)然,通常情況下,我們通常會對每個(gè)版本進(jìn)行很多更改,但這僅說明了各個(gè)階段。和我們一起承擔(dān)。
經(jīng)過大量測試(檢查),并檢查數(shù)據(jù)是否未更改,我們確定這是一個(gè)新版本,并將更新后的表放在源代碼管理中,如下所示:
在這種情況下,我們需要做的就是在自動生成的腳本中添加一個(gè)小陷阱,這意味著我們不會在錯(cuò)誤的版本上執(zhí)行代碼。
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
我們以當(dāng)前版本(2.1.5)為目標(biāo)測試經(jīng)過編輯的遷移腳本。如果一切順利,則它將目標(biāo)的版本標(biāo)記更新為新版本,因?yàn)楸容^的源已經(jīng)擁有它。如果一切都不對,您將得到這個(gè)…
我們將當(dāng)前版本與代表當(dāng)前生產(chǎn)版本的參考版本進(jìn)行比較(在本例中使用SQL數(shù)據(jù)比較),發(fā)現(xiàn)數(shù)據(jù)沒有變化,但是參考數(shù)據(jù)庫現(xiàn)在處于新版本。我們保存遷移腳本并在GitHub上更新項(xiàng)目版本號:
{ "$schema": "http://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "version": "2.1.6" }
最后,我們將包含新版本的構(gòu)建和腳本的本地GitHub目錄推送到源代碼管理。
相關(guān)產(chǎn)品推薦:
SQL Prompt:SQL語法提示工具
SQL Toolbelt:Red Gate產(chǎn)品套包
SQL Monitor:SQL Server監(jiān)控工具
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: