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

2021-04-17 14:43:36 字數 3156 閱讀 1685

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

useadventureworks

select

*from

sys.sysobjects

gohref="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語句應該是——

useadventureworks

select

name

from

sys.sysobjects

where

type

='u'

gohref="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";

儲存過程 獲取連線SQL伺服器的資訊

if exists select from dbo.sysobjects where id object id n dbo p getlinkinfo and objectproperty id,n isprocedure 1 drop procedure dbo p getlinkinfo go ...

取網路上SQL伺服器列表(C )

private void button1 click 1 object sender,system.eventargs e 類 using system using system.text using system.windows.forms using system.runtime.interop...

如何從伺服器上利用儲存過程返回資料集

這是以前我在大富翁回答別人的 例如查詢scott下面的emp 1.建包,定義游標型別和過程 create or replace package pkg demo as type empcurtyp is ref cursor return emp rowtype procedure open emp...