前言:
在实际环境中,会有很多开发人员正在对一个项目编写SQL脚本,此时需要对对象的命名经行强制限定。完成这个任务可以使用强制的一些策略来实现。
合理的命名对象并不仅仅是处于维护需要,有时候也能影响性能,限定数据库的命名对象将能避免一些性能问题。通常SP_是用于SQLServer系统存储过程,但是一些程序员会尝试将其作为自定义存储过程的命名。
下面我们将演示如何使用策略,来限定SP_前缀,让其只属于SQLServer系统存储过程的命名规则。
准备工作:
需要有sysadmin角色的权限登录。
步骤:
1、 连到SQLServer,并右键【策略】,点击【新建策略】,如图:
2、 输入策略名:Stored Procedure Naming Convertion,并选择【新建条件】:
3、 输入Stored Procedure Naming作为名称,并在【方面】中选择【多部分名称】
然后输入图中的表达式:
4、 点击【确定】以后,在【评估模式】中选择【更改时:禁止】,然后点击启用。
5、 现在尝试创建自定义存储过程:
USE AdventureWorks GO CREATE PROC sp_SelectProc AS SELECT 1 GO
6、 因为策略的影响,会看到如下的情况:
这里有个小插曲,原著上并不提及,当我没有在第五步中添加use AdventureWorks的时候,直接执行会报错:
消息233,级别20,状态0,第0 行 在向服务器发送请求时发生传输级错误。(provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)
百思不得其解,在网上搜了一下类似的错误,发现别人的代码少了一些GO之类的语句,然后我就尝试把代码完善,加上了use,结果就可以执行了,暂时未有官方解释,我也尝试禁用了策略后执行,也没错,所以我觉得编程规范在这里显示的特别重要,另外我也尝试了use语句注销掉,但是不删除,依然能够执行,估计SQLServer还是检测到了。
7、 现在把存储过程名换成别的名字,将不会发生任何错误(当然如果存储过程名字已经存在或者有其他语法错误,还是会报错,但是于策略无关):
USE AdventureWorks GO CREATE PROC usp_SelectProc AS SELECT 1 GO