我正在尝试向DatabaseA查询在三十天前在SchemaC中创建的表。我设法凑齐了两个单独的查询;找到在SchemaC中创建的所有表的一个:
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'SchemaC'
ORDER BY TABLE_NAME
找到数据库中30天前创建的所有表:
SELECT [name] AS [DatabaseA], [create_date] AS [CreatedDate] FROM sys.tables
WHERE [create_date] < DATEADD(day, -30, GETDATE())
ORDER BY TABLE_NAME
我可以比较结果并获取我需要的信息,但我确信我缺乏专业知识会阻止我找到返回我想要的所有信息的单个查询。我是否正确地解决这个问题并且有一种更有效的方法?
答案 0 :(得分:1)
您可以将两个表连接在一起并添加AND
,如此
SELECT * FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN sys.tables st ON t.table_name = st.name
WHERE TABLE_SCHEMA = 'SchemaC'
AND [create_date] < DATEADD(day, -30, GETDATE())
ORDER BY TABLE_NAME
答案 1 :(得分:1)
这是另一种直接进入sys.objects的方法。 INFORMATION_SCHEMA对象用于向后兼容。通常应避免使用它们。
The case against INFORMATION_SCHEMA views
select *
from sys.objects
where SCHEMA_NAME(schema_id) = 'SchemaC'
and create_date < DATEADD(day, -30, GETDATE())
and type = 'U' --user Table