C#遍歷SQL服務器上的存儲過程和表

href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/02/clip_filelist.xml" rel="File-List" />

平時我們操作比較多的都是表裏的數據,也許突然有一天會需要把所有表的名字都列出來看一看——比如,你的論壇是按每個版塊一個表來管理的,這時候你要在首頁列出各版塊的名字。應該怎麼辦呢?

肯定得用SELECT……但我們平時使用SELECT操作的數據都是表裏的數據,表的名字並不是表的數據,這可怎麼辦呢?

你可能會想:功能強大的SQL Server不會連這麼簡單的功能都實現不了吧?一定會把所有表的名字存儲在某個表裏……”注意啦!在這兒我要小小地偷換一下概念了——視圖(View)也算是一種,只不過它是由固定查詢形成的一種虛擬表

OK,你猜對啦!由SQL Server管理的每個數據庫裏都有一個名爲sysobjects的視圖,它是system級別的,所以它的全限定名是——sys.sysobjects

你可能又會問:爲什麼不是sys.tables而是sys.objects呢?問的好!因爲這張表裏存儲的可不光是數據庫裏的表,它存儲的是一個數據庫中所有的對象”——雜七雜八包括了表的主鍵、存儲過程、觸發器等等,一共是24——表(Table,確切地說是用戶自定義表)只是這24種對象中的一種。

剩下的事情……

執行下面的查詢語句,可以得到所有包含在sys.sysobjects視圖裏的數據
href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/02/clip_filelist.xml" rel="File-List" /> href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/02/clip_editdata.mso" rel="Edit-Time-Data" />USE AdventureWorks

SELECT * FROM sys.sysobjects
GO
href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/02/clip_filelist.xml" rel="File-List" />

得出數據後,請注意名爲type的列——這一列標明瞭對象的類型,也就是前面提到的24種。在這裏,我用一個表格把它們列出來:

href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/04/clip_filelist.xml" rel="File-List" />

 

AF = Aggregate function (CLR)

C = CHECK constraint

D = DEFAULT (constraint or stand-alone)

F = FOREIGN KEY constraint

FN = SQL scalar function

FS = Assembly (CLR) scalar function

FT = Assembly (CLR) table-valued function

IF = SQL inline table-valued function

IT = Internal table

P = SQL stored procedure

PC = Assembly (CLR) stored procedure

PK = PRIMARY KEY constraint

R = Rule (old-style, stand-alone)

RF = Replication-filter-procedure

S = System base table

SN = Synonym

SQ = Service queue

TA = Assembly (CLR) DML trigger

TF = SQL table-valued-function

TR = SQL DML trigger

U = Table (user-defined)

UQ = UNIQUE constraint

V = View

X = Extended stored procedure

    

OK,我們要得到名稱的表(用戶自定義表)就是類型爲“U”的對象;而sys.objects的類型爲“S”。所以,爲了達到我們的最終目的,SQL語句應該是——

USE AdventureWorks
    SELECT name FROM sys.sysobjects WHERE type='U'
    GO

href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/07/clip_filelist.xml" rel="File-List" /> href="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/07/clip_editdata.mso" rel="Edit-Time-Data" />


PS: SELECT name FROM sys.sysobjects WHERE type='U' 查詢的結果中除了用戶自定義的表之外,還有一個dtproperties表,爲了得到確切的用戶自定義表的列表,需要在查詢條件中添加一個條件,即name<>'dtproperties'。即:"select name from sysobjects where type='U'and name<>'dtproperties'"

另外的方法:

SQL2005遍歷SQL數據庫上表名

strcmd = "select name from sysobjects where objectproperty(id, N'IsUserTable')=1";

 

SQL2005遍歷SQL數據庫上存儲過程名

strcmd = "select name from sysobjects where objectproperty(id, N'IsProcedure')=1";





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章