创建你自己的系统存储过程(上)
通过在一个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