2

我的问题很像这里的问题:

如何在 SQL Server 中查找所有数据库中所有表的列名

但由于声誉不是 50 或 >,我无法发表评论,而且我不能在答案框中输入任何内容,因为您应该在答案框中输入答案。

我从 Stack Overflow 得到这段代码:

SELECT *
FROM master..sysdatabases
where dbid > 4
--order by dbid
order by name

它工作得很好——它列出了我们所有的数据库。

我想做的是得到一个显示这些列的结果表:

DatabaseName、TableSPViewName、FieldName、TypeSize、Indexed

DatabaseName将只是数据库的名称。
TableSPViewName将包含
       该数据库中所有表
       的名称 该数据库中任何存储过程
       的名称 该数据库中所有视图的名称
FieldName将是该表中所有字段的列表(如果它是一个表或视图)
TypeSize将是该字段的类型和大小(例如:int、varchar(##)、bit ...)

编辑 2013 年 9 月 20 日 ---------------

在此站点上:http:

//blog.sqlauthority.com/2009/04/26/sql-server-list-all-the- tables-for-all-databases-using-system-tables/

我发现了这个:

exec sp_msforeachdb 'select "?" AS db, * from ?.sys.tables'

但是该 SP 为每个 DB 及其所有表建立了一个单独的查询窗口,因此您可以获得

DB 及其所有表
DB 及其所有表
DB 与我需要的所有表
DB 及其所有表




DB 1 表 1 字段 1
DB 1 表 1 字段 2
DB 1 表 1 字段 3
DB 1 表 2 字段 1
DB 1 表 2 字段 2
DB 1 表 2 字段 3
DB 1 表3 字段 1
数据库 1 表 3 字段 2
数据库 1 表 3 字段 3
数据库 2 表 1 字段 1
DB 2 表 1 字段 2
DB 2 表 1 字段 3
DB 2 表 2 字段 1
DB 2 表 2 字段 2
DB 2 表 2 字段 3
DB 2 表 3 字段 1
DB 2 表 3 字段 2
DB 2 表 3 字段 3

编辑# 2 2013 年 9 月 20 日 ---------------

在本网站上:http:

//blog.clicdata.com/2012/08/02/how-to-list-all-tables- and-columns-with-types-in-a-sql-server-database/

我发现这个:

SELECT  tTables.name AS table_name,
        tCols.name AS column_name,
        tTypes.name,        
        tTypes.max_length,       
        tTypes.precision,        
        tTypes.scale
        FROM    sys.tables AS tTables
        INNER JOIN sys.columns AS tCols 
        ON tTables.OBJECT_ID = tCols.OBJECT_ID
        JOIN sys.types AS tTypes 
        ON tCols.user_type_id = tTypes.user_type_id
        ORDER BY tTables.name;


但这仅适用于正在使用的 CURRENT 数据库。
它让我非常接近我正在寻找的东西,但我仍然需要一个查询来完成上述操作,但对于我们拥有的所有数据库。请参阅上面显示的“DB 1 table 1 field 1”的长列表。如果我们可以将上面的查询添加到上面生成的左侧的 DATABASENAME 并为所有数据库执行此操作,我们将开展业务!


4

1 回答 1

0

一种方法是

EXEC sp_msforeachdb ‘SELECT tTables.name AS table_name,
tCols.name AS column_name,
tTypes.name,
tTypes.max_length,
tTypes.precision,
tTypes.scale
FROM sys.tables AS tTables
INNER JOIN sys.columns AS tCols
ON tTables.OBJECT_ID = tCols.OBJECT_ID
JOIN sys.types AS tTypes
ON tCols.user_type_id = tTypes.user_type_id
ORDER BY tTables.name;’

对于一个完整的表,将结果插入到临时表中。

于 2013-12-19T12:53:13.983 回答