好学IT学院:IT信息技术分享交流平台
来源:IT专家网  作者:不详  发布时间:2008-11-25  ★★★加入收藏〗〖手机版
摘要:创建你自己的系统存储过程(上)通过在一个SQL Server主数据库中创建一个带有sp_前缀的存储过程,你可以充分利用引擎存储过程名称解析算法的优势。如果一个存储过程以sp_开头,那么这个引擎将会在检查当前数据库和属主之前先查找主数据库。顺……

创建你自己的系统存储过程(中)

通过查看输出结果,我们可以看到,正如执行SQL Server 2000语句一样,DB_NAME()在AdventureWork数据库上下文环境下运行,以此从系统对象中找回员工表的元数据。然而,相同意义的INFORMATION_SCHEMA 和SQL Server 2005语句不能利用这个方法,并且员工表的查询彻底失败。这种方法行不通,是因为实际上这两个语句在主数据库上下文环境下执行。当在主数据库中找到这个存储过程时,把当前数据库上下文环境应用到SQL Server 2005具体目录信息是不明智的。

图1

图2

那么,SQL Server 2000系统表最终淘汰,我们要如何解决这个问题呢?这里有一个无正式文件说明的系统存储过程叫做sp_ms_marksystemobject,它可以用来标记该引擎,因此这个存储过程应该可以运行,尽管它是一个微软提供的系统存储过程。与其它无正式文件说明的命令一样,它有可能在以后的一个版本中消失,所以你可能要自担风险来使用它。

USE MASTER
GO
EXEC sp_ms_marksystemobject 'SP_GETOBJECTS'
GO

SELECT NAME, IS_MS_SHIPPED
FROM SYS.OBJECTS
WHERE NAME = 'SP_GETOBJECTS'
GO

把我们的存储过程记为sp_ms_marksystemobject表示它已经用引擎登录了,因为它是一个微软提供的过程。

  • 好学考试H5触屏版开放内测
  • 好学触屏公众号虎力全开、杨帆起航!