在查询特定表的元数据时,我可以
- 使用该
OBJECT_ID
功能或 - 加入相关的系统表(
sys.tables
和sys.schemas
)。
例如,这两个查询都将返回 table 的所有 DML 触发器myTable
:
SELECT *
FROM sys.triggers AS t
WHERE t.parent_id = OBJECT_ID('[dbo].[myTable]', 'U')
SELECT *
FROM sys.triggers AS tr
INNER JOIN sys.tables AS tab ON tr.parent_id = tab.object_id
INNER JOIN sys.schemas AS s ON tab.schema_id = s.schema_id
WHERE s.name = 'dbo' AND tab.name = 'myTable';
纯粹是口味问题,还是有充分的理由偏爱其中一个(如果两者都能解决您的问题)?
我的初步分析是:
- 选项 1 更短(显然)。
- 使用选项 2,我无需担心引用/转义表/模式名称(如果它包含特殊字符)。
- 查询计划不同(但不太可能产生巨大差异,因为这不是我计划经常执行的操作)。
我错过了什么重要的事情吗?
从评论转换: