日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

SQL2000系統(tǒng)表、存儲過程、函數(shù)的功能介紹及應用

系統(tǒng) 2010 0

---- 系統(tǒng)表 --------------------------------------------------------------------------------------

雖然使用系統(tǒng)存儲過程、系統(tǒng)函數(shù)與信息架構視圖已經(jīng)可以為我們提供了相當豐富的元數(shù)據(jù)信息,但是對于某些特殊的元數(shù)據(jù)信息,我們仍然需要直接對系統(tǒng)表進行查詢。因為 SQL Server 將所有數(shù)據(jù)庫對象的信息均存放在系統(tǒng)表中,作為 SQL Server 的管理、開發(fā)人員,了解各個系統(tǒng)表的作用將有助于我們了解 SQL Server 的內在工作原理。

SQL Server 的系統(tǒng)表非常多,其中最常用的與元數(shù)據(jù)查詢有關的表有如下一些:

?

系統(tǒng)表

描述

syscolumns

存儲每個表和視圖中的每一列的信息以及存儲過程中的每個參數(shù)的信息。

syscomments

存儲包含每個視圖、規(guī)則、默認值、觸發(fā)器、 CHECK 約束、 DEFAULT 約束和存儲過程的原始 SQL 文本語句。

sysconstraints

存儲當前數(shù)據(jù)庫中每一個約束的基本信息。

sysdatabases

存儲當前服務器上每一個數(shù)據(jù)庫的基本信息。

sysindexes

存儲當前數(shù)據(jù)庫中的每個索引的信息。

sysobjects

存儲數(shù)據(jù)庫內的每個對象(約束、默認值、日志、規(guī)則、存儲過程等)的基本信息。

sysreferences

存儲所有包括 FOREIGN KEY 約束的列。

systypes

存儲系統(tǒng)提供的每種數(shù)據(jù)類型和用戶定義數(shù)據(jù)類型的詳細信息。

將系統(tǒng)存儲過程、系統(tǒng)函數(shù)、信息架構視圖與系統(tǒng)表結合使用,可以方便地讓我們獲得所有需要的元數(shù)據(jù)信息。

示例:

1 獲得當前數(shù)據(jù)庫所有用戶表的名稱。

SELECT OBJECT_NAME (id)

FROM sysobjects

WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0

其中主要用到了系統(tǒng)表 sysobjects 以及其屬性 xtype ,還有就是用到了 OBJECTPROPERTY 系統(tǒng)函數(shù)來判斷是不是安裝 SQL Server 的過程中創(chuàng)建的對象。

2 獲得指定表上所有的索引名稱

SELECT name FROM sysindexes

WHERE id = OBJECT_ID ('mytable') AND indid > 0

---- 系統(tǒng)存儲過程 ---------------------------------------------------------------------------

?

系統(tǒng)存儲過程

描述

sp_columns

返回指定表或視圖的列的詳細信息。

sp_databases

返回當前服務器上的所有數(shù)據(jù)庫的基本信息。

sp_fkeys

若參數(shù)為帶有主鍵的表,則返回包含指向該表的外鍵的所有表;若參數(shù)為帶有外鍵的表名,則返回所有同過主鍵 / 外鍵關系與該外鍵相關聯(lián)的所有表。

sp_pkeys

返回指定表的主鍵信息。

sp_server_info

返回當前服務器的各種特性及其對應取值。

sp_sproc_columns

返回指定存儲過程的的輸入、輸出參數(shù)的信息。

sp_statistics

返回指定的表或索引視圖上的所有索引以及統(tǒng)計的信息。

sp_stored_procedures

返回當前數(shù)據(jù)庫的存儲過程列表,包含系統(tǒng)存儲過程。

sp_tables

返回當前數(shù)據(jù)庫的所有表和視圖,包含系統(tǒng)表。

?

---- 系統(tǒng)函數(shù) ----------------------------------------------------------------------------------------------------

COLUMNPROPERTY

返回有關列或過程參數(shù)的信息,如是否允許空值,是否為計算列等。

COL_LENGTH

返回指定數(shù)據(jù)庫的指定屬性值,如是否處于只讀模式等。

DATABASEPROPERTYEX

返回指定數(shù)據(jù)庫的指定選項或屬性的當前設置,如數(shù)據(jù)庫的狀態(tài)、恢復模型等。

OBJECT_ID

返回指定數(shù)據(jù)庫對象名的標識號

OBJECT_NAME

返回指定數(shù)據(jù)庫對象標識號的對象名。

OBJECTPROPERTY

返回指定數(shù)據(jù)庫對象標識號的有關信息,如是否為表,是否為約束等。

fn_listextendedproperty

返回數(shù)據(jù)庫對象的擴展屬性值,如對象描述、格式規(guī)則、輸入掩碼等。

---- 使用信息架構視圖訪問元數(shù)據(jù) ---------------------------------------------------------------------------------------------------

信息架構視圖基于 SQL-92 標準中針對架構視圖的定義,這些視圖獨立于系統(tǒng)表,提供了關于 SQL Server 元數(shù)據(jù)的內部視圖。信息架構視圖的最大優(yōu)點是,即使我們對系統(tǒng)表進行了重要的修改,應用程序也可以正常地使用這些視圖進行訪問。因此對于應用程序來說,只要是符合 SQL-92 標準的數(shù)據(jù)庫系統(tǒng),使用信息架構視圖總是可以正常工作的。

常用的信息架構視圖有以下一些:

信息架構視圖

描述

INFORMATION_SCHEMA .CHECK_CONSTRAINTS

返回有關列或過程參數(shù)的信息,如是否允許空值,是否為計算列等。

INFORMATION_SCHEMA .COLUMNS

返回當前數(shù)據(jù)庫中當前用戶可以訪問的所有列及其基本信息。

INFORMATION_SCHEMA .CONSTRAINT_COLUMN_USAGE

返回當前數(shù)據(jù)庫中定義了約束的所有列及其約束名。

INFORMATION_SCHEMA .CONSTRAINT_TABLE_USAGE

返回當前數(shù)據(jù)庫中定義了約束的所有表及其約束名。

INFORMATION_SCHEMA .KEY_COLUMN_USAGE

返回當前數(shù)據(jù)庫中作為主鍵 / 外鍵約束的所有列。

INFORMATION_SCHEMA .SCHEMATA

返回當前用戶具有權限的所有數(shù)據(jù)庫及其基本信息。

INFORMATION_SCHEMA .TABLES

返回當前用戶具有權限的當前數(shù)據(jù)庫中的所有表或者視圖及其基本信息。

INFORMATION_SCHEMA .VIEWS

返回當前數(shù)據(jù)庫中的當前用戶可以訪問的視圖及其所有者、定義等信息。

由于這些信息架構都是以視圖的方式存在的,因此我們可以很方便地獲得并利用需要的信息。

例如,我們要得到某個表有多少列,可以使用以下語句:

SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME='mytable'

?

?

---- 應用 ----------------------------------------------------------------------

--1 :獲取當前數(shù)據(jù)庫中的所有用戶表

select Name from sysobjects where xtype='u' and status>=0

--2 :獲取某一個表的所有字段

select name from syscolumns where id=object_id(N' 表名 ')

--3 :查看與某一個表相關的視圖、存儲過程、函數(shù)

select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like N'% 表名 %'

--4 :查看當前數(shù)據(jù)庫中所有存儲過程

select name as 存儲過程名稱 from sysobjects where xtype='P'

--5 :查詢用戶創(chuàng)建的所有數(shù)據(jù)庫

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 :查詢某一個表的字段和數(shù)據(jù)類型

select column_name,data_type from information_schema.columns

where table_name = N' 表名 '

--7: 獲取數(shù)據(jù)庫文件路徑

select ltrim(rtrim(filename)) from 數(shù)據(jù)庫名 ..sysfiles where charindex('MDF',filename)>0

or

select ltrim(rtrim(filename)) from 數(shù)據(jù)庫名 ..sysfiles where charindex('LDF',filename)>0

--8: 獲取某一個表的基本信息

sp_MShelpcolumns N' 表名 '

--9: 獲取某一個表的主鍵、外鍵信息

exec sp_pkeys N' 表名 '

exec sp_fkeys? N' 表名 '

--10: 判斷某一個表是否存在某一列 ( 字段 )

if exists(select 1 from syscolumns where id=object_id(N' 表名 ) and name=N' 字段 ')

??? print? N' 存在 '

else

??? print? N' 不存在 '

?

下面給出了一個存儲過程,它的作用是自動將當前數(shù)據(jù)庫的用戶存儲過程加密。

DECLARE @sp_name nvarchar(400)

DECLARE @sp_content nvarchar(2000)

DECLARE @asbegin int

declare @now datetime

select @now = getdate()

DECLARE sp_cursor CURSOR FOR

SELECT object_name(id)

FROM sysobjects

WHERE xtype = 'P'

AND type = 'P'

AND crdate < @now

AND OBJECTPROPERTY(id, 'IsMSShipped')=0

OPEN sp_cursor

FETCH NEXT FROM sp_cursor

INTO @sp_name

WHILE @@FETCH_STATUS = 0

BEGIN

SELECT @sp_content = text FROM syscomments WHERE id = OBJECT_ID(@sp_name)

SELECT @asbegin = PATINDEX ( '%AS' + char(13) + '%', @sp_content)

SELECT @sp_content = SUBSTRING(@sp_content, 1, @asbegin - 1)

+ ' WITH ENCRYPTION AS'

+ SUBSTRING (@sp_content, @asbegin+2, LEN(@sp_content))

SELECT @sp_name = 'DROP PROCEDURE [' + @sp_name + ']'

EXEC sp_executesql @sp_name

EXEC sp_executesql @sp_content

FETCH NEXT FROM sp_cursor

INTO @sp_name

END

CLOSE sp_cursor

DEALLOCATE sp_cursor

該存儲過程利用了 sysobjects syscomments 表,并巧妙地修改了原存儲過程的 SQL 定義語句,將 AS 修改為了 WITH ENCRYPTION AS ,從而達到了加密存儲過程的目的。本存儲過程在 SQL Server 2000 上通過。

來源:http://www.cnblogs.com/Spring/archive/2008/05/28/1209092.html?

SQL2000系統(tǒng)表、存儲過程、函數(shù)的功能介紹及應用


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 通道| 黑水县| 临沧市| 名山县| 新宾| 望都县| 小金县| 松江区| 正镶白旗| 广宗县| 浑源县| 广丰县| 贡嘎县| 平山县| 海盐县| 阳泉市| 辽源市| 西安市| 城口县| 盱眙县| 吉首市| 隆尧县| 洛扎县| 锦州市| 哈密市| 新竹市| 永新县| 喀什市| 玉环县| 上蔡县| 瑞金市| 金沙县| 玛沁县| 河北省| 静海县| 定兴县| 磐石市| 昭通市| 织金县| 亚东县| 龙口市|