天天看点

SQL Server 数据库系统对象应用(1)

1.数据库表信息查询视图

--查找所有用户表的信息

IF object_id(N'dbo.TableInfo', 'V') IS NOT NULL

 DROP VIEW dbo.TableInfo

GO

CREATE VIEW TableInfo AS

SELECT S.name AS [SCHEMA],O.name AS TABLENAME,C.name AS COLUMNNAME,T.name AS DATATYPE,C.max_length AS [LENGTH],C.is_nullable AS [ISNULL]

FROM sys.all_columns C

LEFT JOIN sys.all_objects O ON C.object_id=O.object_id

LEFT JOIN sys.systypes T ON C.system_type_id=T.xtype

LEFT JOIN sys.schemas S ON O.schema_id=S.schema_id

WHERE O.type='U'

GO

--SELECT * FROM dbo.tableInfo;

2. 表和数据库遍历的系统存储过程

sp_MSforeachtable--表遍历

@command1 nvarchar(2000),              --第一条运行的SQL指令

@replacechar nchar(1) = N'?',          --表占位符

@command2 nvarchar(2000)= null,        --第二条运行的SQL指令

@whereand nvarchar(2000)= null,        --可选条件来选择表

@precommand nvarchar(2000)= null,      --执行指令前的操作(类似控件的触发前的操作)

@postcommand nvarchar(2000)= null      --执行指令后的操作(类似控件的触发后的操作)

sp_MSforeachdb--数据库遍历

@command1 nvarchar(2000),              --第一条运行的SQL指令

@replacechar nchar(1) = N'?',          --数据库占位符

@command2 nvarchar(2000)= null,        --第二条运行的SQL指令

@precommand nvarchar(2000)= null,      --执行指令前的操作(类似控件的触发前的操作)

@postcommand nvarchar(2000)= null      --执行指令后的操作(类似控件的触发后的操作)

example:

EXEC sp_MSforeachtable @command1="print '?'"

EXEC sp_MSforeachdb      @command1="print 'DBCC SHRINKDATABASE ('+'?'+',10)' "

 3.OLE自动化存储过程

sp_OACreate{progid|clsid,objecttoken OUTPUT[,context]}  创建一个OLE对象实例

sp_OADestory {objecttoken} 释放一个先前创建的OLE对象所占的资源

sp_OAMethod {objecttoken,methodname[,returnvalue OUTPUT][[,@parametername=] parameter[OUTPUT][...n]]}调用一个OLE对象的方法

sp_OAGetProperty{objecttoken,properityname[,properityvalue OUTPUT]} 获取OLE对象的指定属性

sp_OASetProperty{objecttoken,properityname,newvalue} 设置OLE对象的指定属性

sp_OAStop 停止服务器范围内的OLE自动化存储过程执行环境

sp_OAGetErrorInfo{[objecttoken][,source OUTPUT][,description OUTPUT][,helpfile OUTPUT][,helpid OUTPUT]} 获取出错的错误信息