SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。
SQL Compare试用版
将数据库置于源代码管理中
我们要做的下一件事是将当前版本的Pubs放入源代码管理(GitHub)中。我只是使用SQL Compare来做到这一点(请参阅使用SQL Compare的追溯数据库源控件),但是您可能更喜欢使用SQL Source Control。
将当前版本的Pubs数据库设置为源,将新创建的GitHub目录的Build子目录设置为目标。
{"$schema": "https://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;
当然,通常情况下,我们通常会对每个版本进行很多更改,但这仅说明了各个阶段。和我们一起承担。
经过大量测试(检查),并检查数据是否未更改,我们确定这是一个新版本,并将更新后的表放在源代码管理中,如下所示:
- 标记新的开发版本2.1.6

在这种情况下,我们需要做的就是在自动生成的脚本中添加一个小陷阱,这意味着我们不会在错误的版本上执行代码。
SET NUMERIC_ROUNDABORT OFFGOSET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ONGOSET XACT_ABORT ONGOSET TRANSACTION ISOLATION LEVEL SerializableGOBEGIN TRANSACTION;--inserted codeDeclare @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 codeGOIF @@ERROR <> 0 SET NOEXEC ONGOPRINT N'Altering [dbo].[pub_info]'GOIF @@ERROR <> 0 SET NOEXEC ONGOALTER TABLE [dbo].[pub_info] ALTER COLUMN [logo] [varbinary] (max) NULLGOIF @@ERROR <> 0 SET NOEXEC ONGOALTER TABLE [dbo].[pub_info] ALTER COLUMN [pr_info] [nvarchar] (max) COLLATE Latin1_General_CI_AS NULLGOIF @@ERROR <> 0 SET NOEXEC ONGOPRINT N'Creating extended properties'GOBEGIN 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, NULLEND TRYBEGIN 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 ONEND CATCHGOCOMMIT TRANSACTIONGOIF @@ERROR <> 0 SET NOEXEC ONGO-- 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') = 1BEGIN 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'""声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!