SQL Server里一些未公开的扩展存储过程

[转帖] 博客天地 www.inbaidu.com

SQL Server里一些未公开的扩展存储过程

扩展存储过程(xp)是直接运行在SQL Server地址空间里的动态链接库,是通过使用SQL Server开放数据服务API(SQL Server Open Data Services API)开发的。我们可以像执行普通存储过程一样,在“查询分析器”里运行扩展存储过程。扩展存储过程被用于SQL Server的扩展功能,我们可以直接利用SQL Server附带的众多扩展存储过程,也可以用C或C++等编程语言编写我们自己的扩展存储过程。
在本文中,我将告诉大家一些未公开的有用的扩展存储过程。这些存储过程可以运行于SQL Server 7.0,当然SQL Server 2000也可以。

1、sp_MSgetversion
这个扩展存储过程可以用来获得Microsoft SQL Server的当前版本。要获得SQL Server的版本,执行:
EXEC master..sp_MSgetversion
注意,还有一种方法获得SQL Server的当前版本(这种方法能得到更多信息),那就是用下面的SELECT语句:
SELECT @@version

2、xp_dirtree
这个扩展存储过程可以用于为在扩展存储(xp)中命名的文件夹列出所有文件夹。要列出C:\MSSQL7中的所有文件夹,执行:
EXEC master..xp_dirtree 'C:\MSSQL7'

3、xp_enum_oledb_providers
这个扩展存储过程用于列出所有可用的OLE DB提供者(OLE DB providers)。它返回提供者的名称、解析名称(Parse Name)和提供者的描述。要获得你的SQL Server的所有OLE DB提供者,执行:
EXEC master..xp_enum_oledb_providers

4、xp_enumcodepages
这个扩展存储过程可以用来列出所有你的SQL Server的代码页(code pages)、字符集和它们的描述。要查看这些信息,执行:
EXEC master..xp_enumcodepages

5、xp_enumdsn
这个扩展存储过程系统所有的DSN和它们的描述。要查看系统DSN,执行:
EXEC master..xp_enumdsn

6、xp_enumerrorlogs
这个扩展存储过程返回所有错误日志的列表和它们的最后更改日期。要获得错误日志列表,执行:
EXEC master..xp_enumerrorlogs

7、xp_enumgroups
这个扩展存储过程返回Windows NT组及其描述的列表。要获得Windows NT组的列表,运行:
EXEC master..xp_enumgroups

8、xp_fileexist
我们可以用这个扩展存储过程来确定一个特定的文件是否在磁盘上存在。用法:
EXECUTE xp_fileexist filename [, file_exists INT OUTPUT]
比如要检查C:盘是否存在boot.ini文件,执行:
EXEC master..xp_fileexist 'c:\boot.ini'

9、xp_fixeddrives
这是一个非常有用的扩展存储过程,他返回所有硬盘和它们的空闲空间有多少MB的列表。要查看驱动器列表,执行:
EXEC master..xp_fixeddrives

10、xp_getnetname
这个扩展存储过程返回你连接的SQL Server的WINS名。查看这个名称,执行:
EXEC master..xp_getnetname

11、xp_readerrorlog
这个扩展存储过程返回错误日志的内容。我们可以在SQL Server 7.0的默认目录C:\MSSQL7\Log里找到错误日志。要查看错误日志的话,执行:
EXEC master..xp_readerrorlog

12、xp_regdeletekey
这个扩展存储过程将从注册表里删除一个主键。用这个功能的时候务必小心!用法:
EXECUTE xp_regdeletekey [@rootkey=]'rootkey',
                        [@key=]'key'
比如要删除“HKEY_LOCAL_MACHINE”中的“SOFTWARE\Test”这个主键,执行:
EXEC master..xp_regdeletekey @rootkey='HKEY_LOCAL_MACHINE',
                             @key='SOFTWARE\Test'

13、xp_regdeletevalue
这个扩展存储过程将删除注册表里某个特定的键值。用这个功能的时候务必小心!用法:
EXECUTE xp_regdeletevalue [@rootkey=]'rootkey',
                          [@key=]'key',
                          [@value_name=]'value_name'
比如,从“HKEY_LOCAL_MACHINE”中删除“SOFTWARE\Test”下的“Testvalue”,执行:
EXEC master..xp_regdeletevalue @rootkey='HKEY_LOCAL_MACHINE',
                               @key='SOFTWARE\Test',
                               @value_name='Testvalue'

14、xp_regread
这个扩展存储过程从注册表里度数据。用法:
EXECUTE xp_regread [@rootkey=]'rootkey',
                   [@key=]'key'
                   [, [@value_name=]'value_name']
                   [, [@value=]@value OUTPUT]
比如要把“HKEY_LOCAL_MACHINE”中“SOFTWARE\Test”下的“Testvalue”读到变量@test,执行:
DECLARE @test varchar(20)
EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                        @key='SOFTWARE\Test',
                        @value_name='Testvalue',
                        @value=@test OUTPUT
SELECT @test

15、xp_regwrite
这个扩展存储过程用来写注册表。用法:
EXECUTE xp_regwrite [@rootkey=]'rootkey',
                    [@key=]'key',
                    [@value_name=]'value_name',
                    [@type=]'type',
                    [@value=]'value'
比如把变量“Test”写到“HKEY_LOCAL_MACHINE”中“SOFTWARE\Test”下的“Testvalue”,执行:
EXEC master..xp_regwrite
     @rootkey='HKEY_LOCAL_MACHINE',
     @key='SOFTWARE\Test',
     @value_name='Testvalue',
     @type='REG_SZ',
     @value='Test'

16、xp_subdirs
这个扩展存储过程用于为在扩展存储(xp)中命名的文件夹列出文件夹列表。比之于xp_dirtree,xp_subdirs只返回那些深度为1(depth = 1)的文件夹。这里是例子:
EXEC master..xp_subdirs 'C:\MSSQL7'

注意:记住这些未公开的扩展存储过程不是Microsoft官方支持的,并且它们可能在下一个版本的SQL Server中无法找到。

SQL Server里一些未公开的扩展存储过程的更多相关文章

  1. 在SQL Server里为什么我们需要更新锁

    今天我想讲解一个特别的问题,在我每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们需要更新锁?在我们讲解具体需 ...

  2. 在SQL Server里如何进行页级别的恢复

    在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作.假设在SQL Server里你有一个损坏的页,你要从最近的数据库备份只还原有问题的页,而不是还原 ...

  3. 在SQL Server里如何进行数据页级别的恢复

    在SQL Server里如何进行页级别的恢复 关键词:数据页修复 在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作.假设在SQL Server里你 ...

  4. SQL Server里的闩锁介绍

    在今天的文章里我想谈下SQL Server使用的更高级的,轻量级的同步对象:闩锁(Latch).闩锁是SQL Server存储引擎使用轻量级同步对象,用来保护多线程访问内存内结构.文章的第1部分我会介 ...

  5. SQL Server里等待统计(Wait Statistics)介绍

    在今天的文章里我想详细谈下SQL Server里的统计等待(Wait Statistics),还有她们如何帮助你立即为什么你的SQL Server当前很慢.一提到性能调优,对我来说统计等待是SQL S ...

  6. SQL Server里PIVOT运算符的”红颜祸水“

    在今天的文章里我想讨论下SQL Server里一个特别的T-SQL语言结构——自SQL Server 2005引入的PIVOT运算符.我经常引用这个与语言结构是SQL Server里最危险的一个——很 ...

  7. SQL Server里的自旋锁介绍

    在上一篇文章里我讨论了SQL Server里的闩锁.在文章的最后我给你简单介绍了下自旋锁(Spinlock).基于那个基础,今天我会继续讨论SQL Server中的自旋锁,还有给你展示下如何对它们进行 ...

  8. 在SQL Server里如何处理死锁

    在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作.首先我想给你大致讲下SQL Server如何处理死锁.最后我会展示下SQL ...

  9. SQL Server里如何处理死锁

    在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作.首先我想给你大致讲下SQL Server如何处理死锁.最后我会展示下SQL ...

随机推荐

  1. 基于web的项目管理软件Redmine

    Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来, 支持多种数据库,有不少自己独特的功能,例如提供wiki ...

  2. Linux内核3.0移植并基于Initramfs根文件系统启动

    Linux内核移植与启动 Target borad:FL2440 Bootloader:U-boot-2010.09 交叉编译器:buildroot-2012.08 1.linux内核基础知识 首先, ...

  3. 移动端调试 weinre

    weinre 是基于 Node 的工具,因此使用如下命令安装 weinre $ npm install -g weinre 用上面的命令将 weinre 安装到全局,然后就可以使用 weinre的命令 ...

  4. hdu 4502 吉哥系列故事——临时工计划(dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4502 思路:一个简单的dp ,比赛时没做出来呢..... d[i]代表 到第i天时的最大值 #includ ...

  5. Spring3中用注解直接注入properties中的值

    在bean(可是controller, service, dao等了)中,使用@Value注解: @Service public class TestService{ @Value("${s ...

  6. POJ 2455 Secret Milking Machine (二分+无向图最大流)

    [题意]n个点的一个无向图,在保证存在T条从1到n的不重复路径(任意一条边都不能重复)的前提下,要使得这t条路上经过的最长路径最短. 之所以把"经过的最长路径最短"划个重点是因为前 ...

  7. 【Java】Java运行cmd命令直接导出.sql文件

    Java中的Runtime.getRuntime().exec(commandStr)可以调用执行cmd命令 package Util; import java.io.File; import jav ...

  8. jquery自动焦点图

    效果预览:http://runjs.cn/detail/vydinibc  带左右箭头的自动焦点图:http://runjs.cn/detail/wr1d1keh html: <div clas ...

  9. MD5加密帮助类

    using System; using System.Collections.Generic; using System.Text; namespace AIMSCommon { /// <su ...

  10. CodeForce---Educational Codeforces Round 3 The best Gift 解题报告

    对于这题笔者认为可以用数学排列来算,但是由于笔者很懒所以抄了一段大神的代码来交个大家了, 这位大神的基本想法就是通过记录各类书的数量,再暴力破解: 下面贴出这位大神的代码吧: #include< ...