天天看點

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]} 擷取出錯的錯誤資訊