我们知道,SQL Server 2005/2008的系统存储过程在正常情况下是无法直接修改的。

尽管本文是介绍怎样修改它的,但在这里,我还是建议大家尽量不要去修改它。(好像有点绕哈...)

OK,闲话少说,下面我举个实际案例讲解一下,如对于系统存储过程sp_Monitor,若要运行此存储过程,用户必须是 sysadmin 固定服务器角色的成员。

通过执行命令:sp_helptext 'sp_Monitor',我们可以看到,该过程中存在这样的语句:

  1. if (not (is_srvrolemember('sysadmin') = 1))  -- Make sure that it is the SA executing this.
  2. begin
  3. raiserror(15247,-1,-1)
  4. return(1)
  5. end

在这里,我想将该过程中的这些语句去掉,让它能被普通用户执行。下面是具体的修改步骤:

1、停止SQL Server服务

2、进入命令提示行模式。依次执行以下命令:

1)  cd C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Binn  --注:这是SQL 2005的默认安装目录,如你改变了实际安装路径,请按实际修改

2)  sqlservr -s MSSQLSERVER -m --注:启动SQL Server服务,-s 指定实例名称(这里的实例名称是MSSQLSERVER,可按实际修改), -m 指定以单用户管理模式启动

3、以数据库专用管理员(DAC)方式连接SSMS (此处可参见 SQL Server 数据库专用管理员DAC连接方式)

4、执行语句:USE mssqlsystemresource

这里,我友情说明一下,mssqlsystemresource是一个系统数据库,它存储了所有系统存储过程、视图和函数。但它对于所有用户来说,都是不可见的,也就是说,在SSMS、sys.databases等里面,你都看不到它,如果在非DAC连接下,执行上述语句,系统会报错。

5、执行语句:alter database mssqlsystemresource set read_write  --将mssqlsystemresource置为可修改状态,mssqlsystemresource数据库默认是只读的。

6、sp_helptext 'sp_Monitor'  --显示该存储过程的源代码,你可将sp_Monitor改成你实际要改的存储过程名。

7、拷贝步骤6的结果,将create proc改成alter proc,并按你的实际需求修改代码,这里,我将前述的"if (not (is_srvrolemember('sysadmin') = 1))  -- Make sure that it is the SA executing this......"等语句去掉。

8、执行修改后的语句。 --到这一步为止,系统存储过程sp_Monitor已经被我们改了。

9、alter database mssqlsystemresource set read_only  --将mssqlsystemresource还原为只读状态

10、最后,停止SQL Server服务,并以正常方法重新启动SQL Server.

老实说,上面的方法显得较为繁琐,不得万不得已,我不推荐使用。(再强调一次)

其实,可以拷贝系统存储过程的源代码到一个新建的存储过程中,然后再对这个新建的存储过程进行修改,在使用的时候,直接调用这个新过程即可。同样可以达到目的,而且还没有任何副作用。

怎样修改SQL Server 2005/2008的系统存储过程(转)的更多相关文章

  1. SQL SERVER 2005/2008 中关于架构的理解(二)

    本文上接SQL SERVER 2005/2008 中关于架构的理解(一)      架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...

  2. SQL SERVER 2005/2008 中关于架构的理解(一)

    SQL SERVER 2005/2008 中关于架构的理解(一) 在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询, ...

  3. 【转】SQL SERVER 2005/2008 中关于架构的理解

    在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无效.”.当带上了架构名称 ...

  4. 【缓存】Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结

    Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感 ...

  5. 修改SQL Server 2005的默认端口

    修改SQL Server 2005的默认端口 1.打开SQL Server的配置管理程序 Microsoft SQL Server 2005->配置工具->SQL Server Confi ...

  6. PHP连接Microsoft SQL Server 2005/2008

    PHP自带的MSSQL扩展php_mssql.dll原来是给SQL Server 2000用的,难怪连接不上2008?! -_-!!要使用SQL Server 2005以上版本,就要用到微软为PHP提 ...

  7. SQL Server 2005/2008压缩数据库日志的方法

    适用于SQL Server 2005的方法 Backup Log DNName WITH no_log GO DUMP TRANSACTION DNName WITH no_log GO USE DN ...

  8. 修改SQL Server 2005 数据库文件名字

    对于SQLServer 2005的数据库文件名字的修改.不多说,见图: 对于数据库名的更改直接选中要修改的数据库,F2,你懂的,不懂的可以去屎了.....0.0 下面要修改数据库的文件名 原理就是利用 ...

  9. SQL Server 2005,2008 正则表达式 替换函数应用详解

    CREATE function dbo.regexReplace ( @source ntext, --原字符串 ), --正则表达式 ), --替换值 , --是否是全局替换 --是否忽略大小写 ) ...

随机推荐

  1. SPFA算法 O(kE)

    主要思想是:     初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将其入队.直到队列为空时算法结束.     这个算法,简单的说就是队列优化 ...

  2. 简单的抖动运动 主要利用offset left 和 setTimeout

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. C#调用C++Dll封装时遇到的一系列问题

    最近帮底层开发的同时用C#重新封装一下dll,也就是用C#类来封装C++Dll里的方法,以供用户使用. 之前也用到过类似的应用,大多数问题都出在类型转换上,但是这次的应用层出不穷,所以在这里总结一下, ...

  4. Execution Plan 执行计划介绍

    后面的练习中需要下载 Demo 数据库, 有很多不同的版本, 可以根据个人需要下载.  下载地址 -http://msftdbprodsamples.codeplex.com/ 1. 什么是执行计划 ...

  5. HTML一些标签注意事项

    最近在IE10下运行一个以前的做web系统发现了两个小问题: 一.图片上使用"alt"属性来添加一些文字提示信息在IE10下无法正常显示出来 上网查了一下原因:原来是现在一些较新的 ...

  6. PostgreSQL代码分析,查询优化部分,canonicalize_qual

    这里把规范谓词表达式的部分就整理完了.阅读的顺序例如以下: 一.PostgreSQL代码分析,查询优化部分,canonicalize_qual 二.PostgreSQL代码分析,查询优化部分,pull ...

  7. 在ASP.NET MVC下有关上传图片脏数据的解决方案

    在"在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片"中,已经实现了在客户端和服务端限制图片大小和格式,以及在服务端裁剪图片.但还 ...

  8. ASP.NET MVC中商品模块小样

    在前面的几篇文章中,已经在控制台和界面实现了属性值的笛卡尔乘积,这是商品模块中的一个难点.本篇就来实现在ASP.NET MVC4下商品模块的一个小样.与本篇相关的文章包括: 1.ASP.NET MVC ...

  9. C#编程(五十七)----------位数组

    位数组 如果需要处理很多位,就可以使用BitArray类和BitVector32.BitArray位于命名空间System.Collections中. BitVector32位于命名空间System. ...

  10. Thinking in Java---异常处理机制

    java的异常处理机制能够使程序有极好的容错性,让程序更加的健壮.所谓的异常,就是指的阻止当前方法或作用域继续运行的问题,,当程序运行时出现异常时,系统就会自己主动生成一个Exception对象来通知 ...