Create PROCEDURE EnumerateSQLServers
AS
/*
存储过程名称: EnumerateSQLServers
目 的:使用SQLDMO和TSQL列出所有可用的实例
*/
DECLARE @retval int
DECLARE @result varchar(500)
DECLARE @object int
DECLARE @objectList int
DECLARE @src varchar(254)
DECLARE @desc varchar(255)
DECLARE @resultsCount int
DECLARE @counter int
DECLARE @method varchar(255)
--创建SQLDMO对象
EXEC @retval = sp_OACreate 'SQLDMO.Application', @object OUT
--检查对象是否创建成功
IF @retval <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
Select hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
RETURN
END
--调用方法ListAvailableServers() , 为SQLDMO.NameList得到Object_ID
EXEC @retval = sp_OAMethod @object , 'ListAvailableSQlServers()' , @objectList OUT
-- 是否有错误?
IF @retval <> 0
BEGIN
EXEC sp_OAGetErrorInfo @objectList, @src OUT, @desc OUT
Select hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
RETURN
END
--计算局域网里的服务器数量
EXEC @retval = sp_OAGetProperty @objectList , 'Count' , @resultsCount OUT
--再一次进行错误处理
IF @retval <> 0
BEGIN
EXEC sp_OAGetErrorInfo @objectList, @src OUT, @desc OUT
Select hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
RETURN
END
--如果有服务器的话,进入处理.....
IF @resultsCount > 0
BEGIN
SET @counter = 1
DECLARE @ServersTbl table (ServerID int IDENTITY ,ServerName varchar(255))
WHILE @counter <= @resultsCount
BEGIN
--列出SQL实例:一个名字接一个名字的列出
SET @method = 'Item(' + convert(varchar(3),@counter) + ')'
EXEC @retval = sp_OAGetProperty @objectList ,@method , @result OUT
--将数据存到临时表
Insert INTO @ServersTbl (ServerName) Select @result
--移到下一条记录
SET @counter = @counter + 1
END
END
ELSE
BEGIN
SET @result = 'No Servers around you'
Insert INTO @ServersTbl (ServerName) Select @result
END
--释放对象
EXEC @retval = sp_OADestroy @object
IF @retval <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
Select hr=convert(varbinary(4),@retval), Source=@src, Description=@desc
RETURN
END
--好了,可以列出所有可用的实例了 ....
Select * FROM @ServersTbl
GO
------------------------------------------------------------------------------------------------------
枚举数据库名称简单:

程序代码
USE master
select name from sysdatabases;
-------------------------------------------------------------------------------------------------------
一大堆,网摘
--1:获取当前数据库中的所有用户表

程序代码
select Name from sysobjects where xtype='u' and status>=0
--2:获取某一个表的所有字段

程序代码
select name from syscolumns where id=object_id(N'表名')
--3:查看与某一个表相关的视图、存储过程、函数

程序代码
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
--4:查看当前数据库中所有存储过程

程序代码
select name as 存储过程名称 from sysobjects where xtype='P'
--5:查询用户创建的所有数据库

程序代码
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者

程序代码
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
--6:查询某一个表的字段和数据类型

程序代码
select column_name,data_type from information_schema.columns
where table_name = N'表名'
--7:获取数据库文件路径

程序代码
select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('MDF',filename)>0
或者
select ltrim(rtrim(filename)) from 数据库名..sysfiles where charindex('LDF',filename)>0