2009-12-09 41 views
2

我需要遍歷數據庫中的所有表。我與thsi查詢這樣做:如何查詢SQL服務器數據庫中的全表名稱列表

SELECT so.name, so.* 
FROM sysobjects so 
WHERE so.xtype = 'U' 

也能正常工作的所有的「DBO」模式中的表,但它並不適用於任何其他的模式工作。我所要的輸出是這樣的:

Users.Address Users.TelephoneNumbers dbo.GlobalSettings dbo.Configuration

相反,我得到這樣的:

地址 TelephoneNumber GlobalSettings 配置

當我嘗試構建動態SQL查詢時,它失敗,因爲它找不到Address和TelephoneNumber表,因爲它們的模式是不是默認的'dbo'。

任何想法?

+0

什麼版本的SQL Server? YOu可以使用SYSTABLES:http://msdn.microsoft.com/en-us/library/ms187406.aspx – 2009-12-09 20:39:48

+0

這是Sql Server 2000(我相信它來自你發佈的SQL)? – peacedog 2009-12-09 20:39:55

+0

我正在使用SQL 2008 – skb 2009-12-09 20:41:27

回答

2

在SQL Server 2005和了,你不應該再使用淘汰的sysobjects和sytables而這些看法。

使用 「SYS」 目錄視圖來代替:

SELECT * FROM sys.tables 

應該在其他工作比 「DBO」 模式也是如此。

4

如何:

Select Schema_Name + '.' + Table_Name from Information_Schema.Tables 
+0

@OMG Ponies - 不,information_schema.tables將在SQL Server上工作。你可以參考這個鏈接:http://msdn.microsoft.com/en-us/library/ms186224.aspx – dcp 2009-12-09 20:48:18

+0

+1:抱歉,我的立場糾正並撤回我早期的聲明 – 2009-12-09 20:52:04

+0

重要的是給微軟的信貸時他們堅持標準:) – peacedog 2009-12-09 22:12:41

0

在SQL Server 2005/2008:

SELECT * FROM information_schema.tables 

在SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' 
相關問題