2009-12-09 45 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' 
相关问题