Sql server T-SQL中的表和数据库列表

Sql server T-SQL中的表和数据库列表,sql-server,tsql,database-administration,Sql Server,Tsql,Database Administration,如何获取服务器上的数据库+元数据列表以及它们拥有的表+单一视图中的表元数据 有没有办法加入sys.databases和sys.tables 提前感谢您将所需的选择收集到变量中并执行SQL Declare @a varchar(max) Select @a='' select @a=@a + 'select '''+name+''' as DB, * from ['+name+'].sys.tables' + CHAR(10) + 'UNION ' from master.dbo.sysdata

如何获取服务器上的数据库+元数据列表以及它们拥有的表+单一视图中的表元数据

有没有办法加入
sys.databases
sys.tables


提前感谢您

将所需的选择收集到变量中并执行SQL

Declare @a varchar(max)
Select @a=''
select @a=@a + 'select '''+name+''' as DB, *  from ['+name+'].sys.tables' + CHAR(10) + 'UNION '
from master.dbo.sysdatabases

Set @a=SUBSTRING(@a,1,len(@a)-Len('UNION '))
EXEC( @a)

我的方法是创建一个能够检索所有数据的视图 表名的名称。下面是一个存储过程,它将构建 看法如果添加或删除任何新视图,则需要重新创建视图 数据库,但视图应保持良好,只要您的数据库 保持静止

循环:

将检索表名的视图

CREATE PROC sp_BuildDBTablesView

as

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.Views WHERE TABLE_NAME =
'vw_DBTables')
DROP TABLE vw_DBTables

DECLARE @CreateView varchar(8000)
SET @CreateView = 'CREATE VIEW vw_DBTables

as

'

SELECT name
INTO    #DBs
FROM sysDatabases

DECLARE @DBName varchar(100)

WHILE (SELECT COUNT(*) FROM #DBs) 0
BEGIN

SET @DBName = (SELECT min(name) FROM #DBs)

SET @CreateView = @CreateView + 'SELECT * FROM ' + @DBName +
'.INFORMATION_SCHEMA.TABLES' + CHAR(13) + 'UNION' + CHAR(13)

DELETE  #DBs WHERE name = @DBName
END

SET @CreateView = LEFT(@CreateView, LEN(@CreateView) - 6) --- Take
off the last UNION

PRINT @CreateView

EXEC master..sp_SQLExec @CreateView

DROP TABLE #DBs

GO
现在,只要您想查看表,就可以运行:

SELECT * FROM master.dbo.vw_DBTables
你会得到完整的名单


我希望这能有所帮助。

大家好,谢谢你们的帮助

有人指出,以下文章提供了非常简洁的解决方案:


您是要导入它们还是只是查看它们?
SELECT * FROM master.dbo.vw_DBTables
    ------------
-- Microsoft SQL Server database meta data - list of all tables in database
------------
USE AdventureWorks2008; 
-- SQL list all tables using system view sys.objects 
SELECT   SchemaName = SCHEMA_NAME(schema_id), 
         TableName = name 
FROM     sys.objects 
WHERE    TYPE = 'U' 
         AND is_ms_shipped = 0 
ORDER BY SchemaName, 
         TableName 
GO 

/* Partial results 

SchemaName        TableName 
dbo               AWBuildVersion 
dbo               Category 
dbo               DatabaseLog 
dbo               ErrorLog 
dbo               SubCategory 
dbo               sysdiagrams 
HumanResources    Department 
HumanResources    Employee 
HumanResources    EmployeeDepartmentHistory 
HumanResources    EmployeePayHistory 
*/


-- T-SQL alternative: using a different system view - sys.tables 
SELECT   SchemaName = SCHEMA_NAME(schema_id), 
         TableName = name 
FROM     sys.tables 
ORDER BY SchemaName, 
         TableName
GO
------------


-- MSSQL information_schema views - ANSI 92 SQL compatible 
SELECT * 
FROM     INFORMATION_SCHEMA.TABLES 
WHERE    table_type = 'BASE TABLE' 
ORDER BY TABLE_SCHEMA, 
         TABLE_NAME 
/* Partial results 

TABLE_CATALOG     TABLE_SCHEMA      TABLE_NAME                    TABLE_TYPE 
AdventureWorks    Sales             SalesOrderHeader              BASE TABLE 
AdventureWorks    Sales             SalesOrderHeaderSalesReason   BASE TABLE 
AdventureWorks    Sales             SalesPerson                   BASE TABLE 
AdventureWorks    Sales             SalesPersonQuotaHistory       BASE TABLE 
AdventureWorks    Sales             SalesReason                   BASE TABLE 
AdventureWorks    Sales             SalesTaxRate                  BASE TABLE 
AdventureWorks    Sales             SalesTerritory                BASE TABLE 
AdventureWorks    Sales             SalesTerritoryHistory         BASE TABLE
*/

------------
--- SQL list all table in all databases on PRODSRV\SQL2008 SQL Server instance
DECLARE  @CMD VARCHAR(1024) 

CREATE TABLE #TableList ( 
  DatabaseName SYSNAME, 
  SchemaName   SYSNAME, 
  TableName    SYSNAME) 

SET @CMD = 'USE [?]; SELECT DB_NAME()DATABASE_NAME, SCHEMA_NAME(schema_id),
             NAME FROM SYS.TABLES' 
PRINT @CMD -- test & debug

-- T-SQL insert exec undocumented system procedure
INSERT INTO #TableList 
EXEC SP_MSFOREACHDB  @CMD

DELETE FROM #TableList
WHERE  DatabaseName IN ('master','msdb','tempdb','model') 

SELECT * 
FROM   #TableList 
ORDER BY DatabaseName, SchemaName, TableName
GO
/* Partial results

DatabaseName            SchemaName  TableName
AdventureWorks2008      Sales       SalesTerritoryHistory
AdventureWorks2008      Sales       ShoppingCartItem
AdventureWorks2008      Sales       SpecialOffer
*/

DROP TABLE #TableList 
GO
------------