在数据库开发过程中,当10-15名数据库开发者共同工作时,如果其中一人创建了一个名为Customers_tbl的表,另一人创建了一个名为Tbl_Department或Salary的表,这可能会给未来的维护和扩展带来很大的麻烦。另一个常见问题是创建带有前缀"sp_"的存储过程。众所周知,带有"_sp"前缀的对象意味着SQL Server的特殊对象,SQL Server总是首先尝试在master数据库中定位该对象。因此,总是建议避免使用带有"_sp"前缀的对象命名。为了避免这种情况,现在非常常见的做法是每个团队都有自己的策略来维护精确的数据库对象命名规范。
策略管理是SQL Server最出色的特性之一,它使得数据库开发者或DBA的任务变得极其方便。首先定义策略:假设需要一些数据库对象命名策略,这些策略将强制数据库用户创建对象名称时遵守定义的命名策略。
没有对象名称将以前缀sp_开头。在表方面,名称中将不存在前缀或后缀"tbl"。每个存储过程名称必须有后缀_usp(用户定义的存储过程)。每个用户定义的函数必须有后缀_udf。每个视图必须有后缀_vw。
在本文中,不会实现所有这些策略,而是将展示如何使用SQL Server策略管理创建以下策略:"在数据库AdventureWorks2012中,所有存储过程不得以'sp_'开头,并且每个存储过程名称的结尾必须有'_usp'后缀。"
现在,将尝试从声明的策略中找出条件。条件1:"AdventureWorks2012数据库的所有存储过程"表明策略将仅适用于AdventureWorks2012数据库。条件2:"不得以'sp_'开头,并且每个存储过程名称的结尾必须有'_usp'后缀。"这部分表明,存储过程不得有前缀sp_,并且必须有后缀'_usp'。
从Faced中选择"存储过程"表示表达式将仅适用于存储过程。在表达式部分所做的配置只是为了符合第二个条件。表达式将是:
@Name(存储过程的名称)NOT LIKE 'sp_%' AND @Name LIKE '%_usp'
从SSMS中选择管理>策略管理>策略,右键单击策略并点击新建策略。在名称字段中输入"存储过程命名策略"。此时,将在名称字段后立即获得一个禁用模式的"启用:"复选框。从检查条件:下拉菜单中选择"存储过程命名条件"。从目标对:(如下所示)
从SSMS中打开一个新查询窗口,指向数据库AdventureWorks2012或运行以下脚本:
USE AdventureWorks2012
GO
让尝试创建一个带有sp_前缀的存储过程。
策略管理是一种数据库管理方法,它提供了一个管理框架,以便根据一组预定义的标准或策略自动化任务。这些标准化活动可以跨多个服务器实施。