现在的位置: 首页 > 综合 > 正文

SQL Server中几个扩展存储过程

2014年07月28日 ⁄ 综合 ⁄ 共 3184字 ⁄ 字号 评论关闭
--1.返回计算机名称
execute master..xp_getnetname 

--自动报告计算机网络名的更改
select SERVERPROPERTY('MachineName') 

--不报告计算机网络名的更改
select @@SERVERNAME  


--2.返回错误日志内容
if exists(select 1 from sys.tables where name = 'errorLog')
begin
	drop table errorLog
end

create table errorLog
(
LogDate datetime,
ProcessInfo nvarchar(20),
Text nvarchar(max)
)

insert into errorlog
exec master.sys.sp_readerrorlog

select *
from errorLog


--查找存储过程xp_ReadErrorLog
--发现sys.xp_ReadErrorLog调用了master.dbo.xp_ReadErrorLog
select *
from sys.all_sql_modules
where definition like '%sys.xp_ReadErrorLog%'


/*===================================================
默认情况下除当前的错误日志文件外,还有6个错误日志文件,
编号越小那么日志越接近当前日期,错误日志文件数的范围:6~99个。

可接受参数@p1,表示要返回哪个错误日志文件的内容,
可选的参数值:
		0:默认值,表示返回当前错误日志文件的内容
		1:表示返回存档编号1的错误日志文件的内容 
		2:表示返回存档编号2的错误日志文件的内容 
		3:表示返回存档编号3的错误日志文件的内容 
		4:表示返回存档编号4的错误日志文件的内容 
		5:表示返回存档编号5的错误日志文件的内容 
		6:表示返回存档编号6的错误日志文件的内容 
=====================================================*/
exec master.dbo.xp_ReadErrorLog @p1 = 1



--3.返回服务器上安装的所有OLEDB提供程序
if exists(select 1 from sys.tables where name = 'oledbProvider')
begin
	drop table oledbProvider
end

create table oledbProvider
(
ProviderName nvarchar(50),
ProcessInfo nvarchar(100),
Text nvarchar(100)
)

insert into oledbProvider
execute master..xp_enum_oledb_providers 

select *
from oledbProvider



--4.返回服务器上固定驱动器和可用空间
if exists(select 1 from sys.tables where name = 'fixeddrivesFreeSpace')
begin
	drop table fixeddrivesFreeSpace
end

create table fixeddrivesFreeSpace
(
drive nvarchar(10),   --盘符,不带':\'
freeSpace bigint      --以MB为单位的空闲空间
)

insert into fixeddrivesFreeSpace
execute master..xp_fixeddrives 

select drive '盘符',   
       freeSpace * 1.0 / 1024  '空闲空间(GB)'
from fixeddrivesFreeSpace



--5.返回每个存储介质的空闲空间和介质类型
if exists(select 1 from sys.tables where name = 'availablemediaFreeSpace')
begin
	drop table availablemediaFreeSpace
end

create table availablemediaFreeSpace
(
name nvarchar(10),   --盘符,带':\'
lowFree bigint,      --空闲空间的低于32位的表示
highFree int,        --空闲空间的高于32位的表示
mediaType tinyint    --以MB为单位的空闲空间
)

insert into availablemediaFreeSpace
exec master.dbo.xp_availablemedia

/*=============================================
计算方法:

低32位值:正的lowfree或者(65536 * 65536)+负的lowfree 
高32位值:highfree * (65536 * 65536) 

空闲空间 = 低32位值 + 高32位值
===============================================*/
select name '盘符',   
       lowfree,
       highfree,
       
       case when sign(lowfree) = 1  --正数返回1
                 then lowfree + highfree * (1.0 * 65536 * 65536)
            else lowfree + (1.0 * 65536 * 65536) + highfree * (1.0 * 65536 * 65536) 
       end / 1024 /1024 / 1024 '空闲空间(GB)',
       
       case when mediaType = 1
                 then '软盘'
            when mediaType = 2
                 then '硬盘'
            when mediaType = 8
                 then 'CD-ROM'
       end '存储介质类型'
from availablemediaFreeSpace



--6.返回服务器上所有windows本地组 
execute master..xp_enumgroups 


--7.返回指定目录下的目录和文件
/*========================================
参数1:目录名
参数2:目录深度
参数3:是否显示文件
==========================================*/
--显示c盘下第一层的目录和文件
execute master..xp_dirtree 'c:',1,1 


--显示c盘下第一层的目录,不显示文件
execute master..xp_dirtree 'c:',1  


--显示c盘下所有的目录和文件
execute master..xp_dirtree 'c:',0,1


--显示指定目录下的子目录
EXEC master.dbo.xp_subdirs 'C:\'



--8.文件是否存在
if exists(select 1 from sys.tables where name = 'fileExists')
begin
	drop table fileExists
end

create table fileExists
(
fileExists tinyint,             --文件是否存在
IsDirectory tinyint,            --是否是目录
parentDirectoryExists tinyint   --父目录是否存在
)

insert into fileExists
execute master..xp_fileexist 'c:\c.txt' 

select *
from fileExists

 查询服务是否启动

--显示SQL Server的服务名称:MSSQLSERVER
select @@servicename


--查询某个服务的状态,返回CurrentServiceState列:Running.
--这样就表示正在运行
EXEC master.dbo.xp_servicecontrol 
	N'QUERYSTATE',        --查询状态
	N'MSSQLSERVER'        --改写为你的SQL Server的服务名称
	

 

抱歉!评论已关闭.