跨多个数据库搜索表名 SQL SERVER 2019

时间:2021-05-02 14:53:56

标签: sql sql-server for-loop conditional-statements

我有一张表,在DatabaseB中表名是AADatatimeBB。

我的SQL服务有多个数据库DatabaseA,DatabaseB,DatabaseC,DatabaseD

如果我不知道表:AADatatimeBB 在哪个数据库中,我该如何搜索?

如果我知道表在哪个数据库中,我可以使用以下查询来搜索表。

在可用的数据库列表中选择数据库名称并运行查询

SELECT * FROM INFORMATION_SCHEMA.TABLES 其中 table_name 像 '%DATASET%'

1 个答案:

答案 0 :(得分:0)

通过以下查询,您可以检索所有数据库的名称。

SELECT name, database_id, create_date  
FROM sys.databases ;  
GO  

OR-----------------------------------

SELECT *
FROM sys.databases ;  
GO  

如果你想要数据库中表的名字,你可以使用下面的查询

USE master 
GO
SELECT * 
FROM information_schema.tables
GO  

OR----------------------------

USE model 
GO
SELECT * 
FROM information_schema.tables
GO  

OR-----------------------

USE ... 
GO
SELECT * 
FROM information_schema.tables
GO  

以下代码在while循环中检索所有数据库并返回每个数据库的所有表。

Declare @tempTable Table
(
  name varchar(100)
)
--Container to Insert records in the inner select for final output

Insert into @tempTable 
SELECT name
FROM sys.databases 


-- Keep track of @tempTable record processing
Declare @name varchar(100)
Declare @SQL VarChar(1000)

While((Select Count(*) From @tempTable)>0)
Begin
  Set @name=(Select Top 1 name From @tempTable)
  --get all db tables
  SELECT @SQL = 'USE ' + QUOTENAME(@name) + ' SELECT * FROM information_schema.tables' 
  Exec (@SQL)
  Delete @tempTable Where name=@name
End

如果您想使用SQL LIKE Operator,请按照下面的代码

SELECT @SQL = 'USE ' + QUOTENAME(@name) + ' SELECT * FROM information_schema.tables WHERE table_name LIKE ''%a%'''
相关问题