亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL2000系統表、存儲過程、函數的功能介紹及應用

系統 1718 0

---- 系統表 --------------------------------------------------------------------------------------

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

SQL Server 的系統表非常多,其中最常用的與元數據查詢有關的表有如下一些:

?

系統表

描述

syscolumns

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

syscomments

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

sysconstraints

存儲當前數據庫中每一個約束的基本信息。

sysdatabases

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

sysindexes

存儲當前數據庫中的每個索引的信息。

sysobjects

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

sysreferences

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

systypes

存儲系統提供的每種數據類型和用戶定義數據類型的詳細信息。

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

示例:

1 獲得當前數據庫所有用戶表的名稱。

SELECT OBJECT_NAME (id)

FROM sysobjects

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

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

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

SELECT name FROM sysindexes

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

---- 系統存儲過程 ---------------------------------------------------------------------------

?

系統存儲過程

描述

sp_columns

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

sp_databases

返回當前服務器上的所有數據庫的基本信息。

sp_fkeys

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

sp_pkeys

返回指定表的主鍵信息。

sp_server_info

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

sp_sproc_columns

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

sp_statistics

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

sp_stored_procedures

返回當前數據庫的存儲過程列表,包含系統存儲過程。

sp_tables

返回當前數據庫的所有表和視圖,包含系統表。

?

---- 系統函數 ----------------------------------------------------------------------------------------------------

COLUMNPROPERTY

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

COL_LENGTH

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

DATABASEPROPERTYEX

返回指定數據庫的指定選項或屬性的當前設置,如數據庫的狀態、恢復模型等。

OBJECT_ID

返回指定數據庫對象名的標識號

OBJECT_NAME

返回指定數據庫對象標識號的對象名。

OBJECTPROPERTY

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

fn_listextendedproperty

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

---- 使用信息架構視圖訪問元數據 ---------------------------------------------------------------------------------------------------

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

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

信息架構視圖

描述

INFORMATION_SCHEMA .CHECK_CONSTRAINTS

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

INFORMATION_SCHEMA .COLUMNS

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

INFORMATION_SCHEMA .CONSTRAINT_COLUMN_USAGE

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

INFORMATION_SCHEMA .CONSTRAINT_TABLE_USAGE

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

INFORMATION_SCHEMA .KEY_COLUMN_USAGE

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

INFORMATION_SCHEMA .SCHEMATA

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

INFORMATION_SCHEMA .TABLES

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

INFORMATION_SCHEMA .VIEWS

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

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

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

SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME='mytable'

?

?

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

--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 N'% 表名 %'

--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

or

select ltrim(rtrim(filename)) from 數據庫名 ..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' 不存在 '

?

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

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系統表、存儲過程、函數的功能介紹及應用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美日韩在线观看二区 | 亚洲欧美第一 | 久久成人网18网站 | 免费高清成人啪啪网站 | 哪个网站能看毛片 | 四虎影视8848a四虎在线播放 | 午夜爱爱网 | 曰本女人色黄网站 | 欧美91精品久久久久网免费 | 四虎影视在线影院4hutv | 国产手机在线视频放线视频 | 四虎在线最新地址4hu | 久草手机在线 | 99视频在线观看免费视频 | 欧美日韩精品国产一区二区 | 九九精品视频一区在线 | 国产99在线 | 麻豆久久婷婷国产综合五月 | 一级毛片www | 操操网站| 梦想成为魔法少女在线观看 | 国产精品九九久久精品女同 | 热热99 | 十大黄色免费网站 | 久久久不卡国产精品一区二区 | 欧美性生活在线 | 九九视频只有精品 | 精品亚洲成a人在线观看 | 91成人免费观看网站 | 国产精品久久久久久久成人午夜 | 香蕉视频97 | 日韩黄色网址 | 色婷婷视频在线 | 日韩在线手机看片免费看 | 天天操天天草 | 久久综合干 | 国产免费久久精品久久久 | 欧美精品h在线播放 | 色综合久久天天综合观看 | 欧美色穴 | 欧美精品一区二区三区视频 |