提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:莫成敏|2019-11-07 11:56:23.060|阅读 381 次
概述:本文描述了自定义部署前和部署后脚本的工作方式,使用SQL Compare或SQL Change Automation进行基于状态的数据库部署时,以及如何使用它们(例如,向目标数据库添加版本号)来指定其数据库设置,或将数据填充到某些表中。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。
将自定义部署脚本与SQL Compare或SQL Change Automation一起使用
本文描述了自定义部署前和部署后脚本的工作方式,使用SQL Compare或SQL Change Automation进行基于状态的数据库部署时,以及如何使用它们(例如,向目标数据库添加版本号)来指定其数据库设置,或将数据填充到某些表中。内容紧接“将自定义部署脚本与SQL Compare或SQL Change Automation一起使用(下)”哦,您可以点击查看~
源代码控制和自定义脚本
部署后和部署前脚本几乎都应该保留在源代码管理中。无论它们创建或更改什么对象,状态都必须处于源代码控制中。通常,对于表拆分之类的更改,只需添加一个SQL Compare过滤器或/exclude切换为告诉SQL Compare在比较中不包括受影响的对象,因为它是在随附的部署后脚本中完成的。这意味着源代码控制可以具有用于更改对象的SQL DDL代码,而它们的存在不会干扰复杂的数据拆分。如前所述,在允许同步脚本进行除对象以外的其余所有更改之前,完全有可能使用预部署脚本将要更改的表中的现有数据从目标表中保存到目标数据库中。您指定要排除在外;然后匹配的部署后脚本可以读取临时表并将数据放置在正确的位置。
两种类型的自定义脚本(部署前和部署后)都应特定于版本。但是,由于它们是幂等的,因此即使它们意外重新运行,它们也通常不会伤害任何东西。脚本文件夹将仅反映一个版本,因此应易于为该版本提供正确的自定义脚本。
不一定要保证数据库部署的目标。如果您不维护实时数据库的版本号,则需要确保自定义脚本将与“疯狂”的所有可能目标版本一起使用。
例子
这些不应该按原样运行; 例如,您需要填写数据库的名称和版本号,或者根据需要调整信息。 数据库设置示例可能会对运行它的不幸数据库产生微妙而广泛的影响。 它们也不代表如何执行这些任务的一般建议,因为您的情况可能会有所不同。例如,“存有数据的表”示例将很好,直到您有成千上万的行,此时您使用大容量插入效果更好。 这些示例仅是为了说明,以向您展示可能性
向表中存储数据
想象一下,您需要构建一个过时的PUBS数据库版本,包括所有数据。该脚本必须位于“部署后”目录中。这是确保dbo.publishers表仅包含原始数据的示例。
PRINT 'Ensuring that the original PUBS test data is there' BEGIN TRY MERGE INTO dbo.publishers AS target USING (VALUES ( '0736', 'New Moon Books', 'Boston', 'MA', 'USA' ), ( '0877', 'Binnet & Hardley', 'Washington', 'DC', 'USA' ), ( '1389', 'Algodata Infosystems', 'Berkeley', 'CA', 'USA' ), ( '1622', 'Five Lakes Publishing', 'Chicago', 'IL', 'USA' ), ( '1756', 'Ramona Publishers', 'Dallas', 'TX', 'USA' ), ( '9901', 'GGG&G', 'Mnchen', NULL, 'Germany' ), ( '9952', 'Scootney Books', 'New York', 'NY', 'USA' ), ( '9999', 'Lucerne Publishing', 'Paris', NULL, 'France' ) )source(pub_id,pub_name,city,[state],country) ON target.pub_id = source.pub_id WHEN NOT MATCHED BY TARGET THEN INSERT ( pub_id,pub_name,city,[state],country ) VALUES ( pub_id,pub_name,city,[state],country ) WHEN NOT MATCHED BY SOURCE THEN DELETE; END try BEGIN CATCH DECLARE @msg nvarchar(max)=Error_Message(), @severity int = ERROR_SEVERITY(), @State int = ERROR_State() RAISERROR(@msg, @severity, @state); SET NOEXEC ON END CATCH
数据库设置
这些必须在部署前脚本中执行。为了使数据库按预期运行,需要某些数据库属性设置。通常最好在部署时检查这些设置,因为它们有时会产生细微的错误。排序规则、恢复模型和兼容性级别是显而易见的,但是还需要检查其他几项,例如自动更新统计信息和自动创建统计信息。当然,您需要确定数据库的正确设置。这些只是DBA可能建议的设置示例。
/* To run this Requires having ALTER permission on the target database. */ PRINT 'Ensuring that the settings are right for this particular database. DECLARE @AutoCreateStatistics INT,@AutoUpdateStatistics INT, @ReadCommittedSnapshot INT,@AutoUpdateStatisticsAsynchronously INT, @recovery_model_desc nvarchar(120),@compatibility_level int SELECT @AutoCreateStatistics=is_auto_create_stats_on, @AutoUpdateStatistics=is_auto_update_stats_on, @AutoUpdateStatisticsAsynchronously=is_auto_update_stats_async_on, @ReadCommittedSnapshot=is_read_committed_snapshot_on, @recovery_model_desc=recovery_model_desc, @compatibility_level=[compatibility_level] FROM sys.databases WHERE name='pubs' IF @AutoCreateStatistics=0 ALTER DATABASE current SET AUTO_CREATE_STATISTICS ON DECLARE @AnyErrors INT =@@error IF @AutoUpdateStatistics=0 ALTER DATABASE current SET AUTO_UPDATE_STATISTICS ON SELECT @AnyErrors=@AnyErrors+@@Error IF @AutoUpdateStatisticsAsynchronously=1 ALTER DATABASE current SET AUTO_UPDATE_STATISTICS_ASYNC OFF SELECT @AnyErrors=@AnyErrors+@@Error if @ReadCommittedSnapshot=0 ALTER DATABASE current SET READ_COMMITTED_SNAPSHOT ON WITH rollback immediate SELECT @AnyErrors=@AnyErrors+@@Error if @recovery_model_desc<>'SIMPLE' ALTER DATABASE CURRENT SET RECOVERY SIMPLE SELECT @AnyErrors=@AnyErrors+@@Error /* normally you'd want it at your current product version but you might, as in this case, need something different check product version with SELECT SERVERPROPERTY('ProductVersion'); */ IF @compatibility_level<>100 --Warning this is specially for old PUBS! ALTER DATABASE PUBS --a bad idea anywhere else SET COMPATIBILITY_LEVEL = 100 SELECT @AnyErrors=@AnyErrors+@@Error --See //docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql?view=sql-server-ver15 before doing this IF NOT EXISTS ( SELECT 1 FROM sys.databases WHERE name= Db_Name() AND collation_name='SQL_Latin1_General_CP1_CI_AI') ALTER DATABASE CURRENT COLLATE SQL_Latin1_General_CP1_CI_AI SELECT @AnyErrors=@AnyErrors+@@Error IF @AnyErrors>0 SET NOEXEC ON
添加版本信息
这可以作为部署前脚本或部署后脚本来完成。此示例脚本仅将版本号和说明作为JSON字符串插入。本文直接将数据与SQL Server数据库对象相关联,其中包含该代码的扩展版本,该版本可以跟踪版本以及何时应用版本。
PRINT N'Adding a version number' GO DECLARE @DatabaseInfo NVARCHAR(3750) SELECT @DatabaseInfo = ( SELECT Db_Name() AS "Name", '2.4.01 (Change This to your version)' AS "Version", 'You will need to edit this string' AS "Description", GetDate() AS "Modified", SUser_Name() AS "by" FOR JSON PATH ); BEGIN TRY IF not EXISTS (SELECT name, value FROM fn_listextendedproperty( N'Database_Info',default, default, default, default, default, default) ) EXEC sys.sp_addextendedproperty @name=N'Database_Info', @value=@DatabaseInfo ELSE EXEC sys.sp_Updateextendedproperty @name=N'Database_Info', @value=@DatabaseInfo END TRY BEGIN CATCH DECLARE @msg nvarchar(max)=Error_Message(), @severity int = ERROR_SEVERITY(), @State int = ERROR_State() RAISERROR(@msg, @severity, @state); SET NOEXEC ON END CATCH
结论
部署前或部署后脚本使我们能够克服开发团队所面临的大多数问题,这些开发团队正在通过SQL Compare在脚本目录中部署数据库代码,同时在版本控制中保留了源代码的唯一真实性。
本教程内容到这里就结束了,喜欢的朋友可以继续关注我们后续内容哦~您也可以下载SQL Compare试用版体验一下~
相关内容推荐:
将自定义部署脚本与SQL Compare或SQL Change Automation一起使用(上)
想要购买SQL Compare正版授权,或了解更多产品信息请点击
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.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@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢