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