通过在一个SQL Server主数据库中创建一个带有sp_前缀的存储过程,你可以充分利用引擎存储过程名称解析算法的优势。如果一个存储过程以sp_开头,那么这个引擎将会在检查当前数据库和属主之前先查找主数据库。顺便说一句,这个名称解析正好是你从来不把自己应用数据库存储过程的前缀命名为sp_,因为每次你尝试着执行这些程序时,你都会不断地产生与不必要查询和缓存缺失有关的费用。
当从主数据库中运行一个带着sp_前缀的程序时,有一些细微的地方需要注意,比如用哪一个数据库上下文环境,什么影响了数据所返回的。
请看下面的例子:
| USE MASTER
GO IF OBJECT_ID('SP_GETOBJECTS') IS NOT NULL DROP PROCEDURE DBO.sp_GETOBJECTS GO CREATE PROCEDURE DBO.sp_GETOBJECTS AS SET NOCOUNT ON SELECT DB_NAME() -- ANSI view SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Employee' -- SQL Server 2005 table SELECT * FROM sys.objects WHERE NAME = 'Employee' -- SQL Server 2000 table SELECT * FROM sysobjects WHERE NAME = 'Employee' SELECT TOP 1 * FROM HumanResources.Employee GO USE AdventureWorks GO EXEC sp_GETOBJECTS GO |

