【问题标题】:Search a table name across multiple databases SQL SERVER 2019跨多个数据库搜索表名 SQL SERVER 2019
【发布时间】:2021-07-25 04:54:57
【问题描述】:

我有一个表,表名是DatabaseB中的AADatatimeBB。

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

如果我不知道表:AADatatimeBB在哪个Database,我该如何搜索呢?

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

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

从 INFORMATION_SCHEMA.TABLES 中选择 * 其中 table_name like '%DATASET%'

【问题讨论】:

  • [master].[sys].[databases] 包含服务器的所有数据库。
  • 一个有据可查的应用程序应该告诉你应用程序正在使用的数据库的名称。

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


【解决方案1】:

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

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

【讨论】:

  • 嗨 Meysam,查询:USE master GO SELECT * FROM information_schema.tables GO 只搜索主表中的表。如果我不知道数据库名称,则无法搜索表名
  • 我更改了代码。您只需稍作改动即可达到预期的效果。首先,我恢复了所有数据库。然后我检索了每个数据库的表。
  • 小心,如果 OP 有任何需要分隔标识的数据库,则会出错。在注入动态对象名称时,您应该使用 QUOTENAME 正确引用对象。
  • 嗨 Meysam,该脚本适用于列出所有表。如何添加我的 where 条件? where table_name like '%DATASET%' SELECT @SQL = 'USE ' + QUOTENAME(@name) + ' SELECT * FROM information_schema.tables where table_name like '%DATASET%'' 错误信息:无效的列名 'DATASET'。跨度>
  • @Anson 我在答案末尾添加了 like 运算符的使用。
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2023-03-16
  • 1970-01-01
  • 2015-11-21
相关资源
最近更新 更多