Ao consultar metadados para uma tabela específica, posso
- use a
OBJECT_ID
função ou - juntar as tabelas de sistema relevantes (
sys.tables
esys.schemas
).
Por exemplo, ambas as consultas retornarão todos os gatilhos DML para table 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';
É puramente uma questão de gosto, ou há uma boa razão para preferir um ao outro (se ambos resolverem seu problema)?
Minha análise preliminar é que:
- A opção 1 é mais curta (obviamente).
- Com a Opção 2, não preciso me preocupar em citar/escapar o nome da tabela/esquema (se contiver caracteres especiais).
- Os planos de consulta são diferentes (mas é improvável que façam uma grande diferença, já que essa não é uma operação que pretendo fazer com frequência).
Eu perdi alguma coisa importante?
Convertido dos comentários: