我找不到使用database_id
加入对象的方法。
我正在尝试编写一个审计查询,它通过接受数据库名称作为参数来扫描表。
我想避免动态查询。 有可能吗?
喜欢
SELECT *
FROM information_schema.tables a
JOIN sys.tables b
ON a.datbase_id = b.database_id
AND b.database_name = 'testdb'
答案 0 :(得分:0)
放手一搏。
select *
from
INFORMATION_SCHEMA.TABLES it
inner join sys.tables st
on st.name = it.table_name
where it.TABLE_CATALOG = 'testdb'
答案 1 :(得分:0)
首先,database_id
中没有information_schema.tables
这样的列。其次,有一个名为sp_msForEachDb
的未记录的存储过程,它逐个遍历所有数据库并运行您想要的脚本,您需要将其作为字符串输入传递给它。
在您的情况下,您似乎希望将information_schema.tables
加入sys.tables
并列出testDB
数据库的表。请尝试下面的脚本:
--Build a temp table to store the info
select * into #a
from INFORMATION_SCHEMA.TABLES it join sys.tables st
on st.name COLLATE SQL_Latin1_General_CP1_CI_AS= it.table_name COLLATE SQL_Latin1_General_CP1_CI_AS
where 1=0
insert into #a --This script runs for each database and populates the info into #a
EXECUTE master.sys.sp_MSforeachdb
'select * from INFORMATION_SCHEMA.TABLES it join [?].sys.tables st
on st.name COLLATE SQL_Latin1_General_CP1_CI_AS= it.table_name COLLATE SQL_Latin1_General_CP1_CI_AS
where it.TABLE_CATALOG = ''testdb'''
select * from #a