提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:杨鹏连|2020-07-10 09:22:45.590|阅读 314 次
概述:本文介绍了所有这些任务,并演示了使用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": "//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": "//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@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢