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