今天在http://www.sqlmag.com/Article/ArticleID/23011/sql_server_23011.html里,发现有提到一点,就是在
ms sql server里,在命名存储过程的时候,尽量避免要用sp_这样的前缀开头,文中的一个实验方法我试了下,也的确是这个回事,原因是如果假设你在数据库a里建立了存储过程,而以sp_x为前缀进行命名存储过程的话,会在寻找的时候,先到master数据库里去找的,这当然是找不到的哦。另外,查看微软的帮助说明可以看到如下的介绍:
烈建议您不要创建以 sp_ 为前缀的存储过程。SQL Server 始终按照下列顺序查找以 sp_ 开头的存储过程:
- 在 master 数据库中查找存储过程。
- 根据所提供的任何限定符(数据库名称或所有者)查找该存储过程。
- 如果未指定所有者,则使用 dbo 作为所有者查找该存储过程。
因此,虽然当前数据库中可能存在带 sp_ 前缀的用户创建的存储过程,但总会先检查 master 数据库(即使该存储过程已用数据库名称限定)。