Mat*_*ttH 3 sql sql-server data-dictionary
我不太熟悉SQL Server数据字典,但我已经假设我正在尝试做的事情是可能的.
我们有许多复制的数据库,名称不同:Client1 Client2 Client3
我不是依赖于命名约定,而是希望根据它们是否包含密钥表来识别这些数据库,将其称为MyTable.所以开始考虑需要以下查询:
SELECT db.name
FROM sys.databases db
JOIN sys.tables tbl ON ??
WHERE tbl.Name = 'MyTable'
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为我看不到如何直接或间接地将sys.tables连接到sys.databases,而sys.tables也是基于活动数据库的视图,而不是所有数据库的完整表集.
任何人都可以为这种情况确定合适的查询吗?
尝试未记录的sp_MSforeachdb
EXECUTE master.sys.sp_MSforeachdb
'select table_catalog from
information_schema.tables where table_name like ''MyTable%'''
Run Code Online (Sandbox Code Playgroud)
作为查询执行此操作的唯一方法是动态构建select语句(在此处插入标准动态sql警告/拒绝)
Declare @SQL varchar(max)
Set @SQL = ''
Select @SQL = @SQL + Coalesce('Select Distinct
table_catalog from ' + name + '.information_schema.tables
where table_name like ''mytable%'' UNION ','' )
from sys.databases where state_desc = 'ONLINE'
and collation_name = 'SQL_Latin1_General_CP1_CI_AS'
set @SQL = Substring(@SQL, 1, Len(@SQL) - 6) + ' order by table_catalog '
exec (@SQL)
Run Code Online (Sandbox Code Playgroud)
*注意我添加了一些可用数据库的状态和整理标准.
| 归档时间: |
|
| 查看次数: |
12482 次 |
| 最近记录: |