Tengo un activador de base de datos que uso para evitar que cree ciertos procedimientos en las bases de datos de los usuarios.
Aparece en sys.triggers
, con un object_id
, pero no puedo usar la object_id
función para encontrarlo.
SELECT OBJECT_ID(t.name, t.type) AS object_id, *
FROM sys.triggers AS t;
Del mismo modo, puedo encontrarlo en sys.dm_exec_trigger_stats
. No puedo object_name
resolver, pero lo object_definition
hace.
SELECT OBJECT_NAME(dets.object_id, dets.database_id) AS object_name,
OBJECT_DEFINITION(dets.object_id) AS object_definition,
*
FROM sys.dm_exec_trigger_stats AS dets;
¿Existe una función que acepte la identificación de objeto del activador de nivel de base de datos y devuelva su nombre?
sql-server
trigger
metadata
ddl-trigger
Erik Darling
fuente
fuente
sys.sql_expression_dependencies
->referenced_id
unirsesys.objects
?parent_id
tal según bol, por ejemplo?object_id(object_name(parent_id))
Respuestas:
Los desencadenantes a nivel de la base de datos y del servidor no tienen alcance como "objetos" per se (es por eso que no puede crearlos bajo un esquema, y por qué no aparecen en
sys.objects
).Puede ver que estos objetos tienen ciertas restricciones, por ejemplo en los
OBJECTPROPERTY()
documentos :Y de manera similar en los
OBJECTPROPERTYEX()
documentos :Los
OBJECT_ID()
documentos son un poco más explícitos:Los
OBJECT_NAME()
documentos son menos explícitos, pero mencionan la misma restricción implícitamente (el énfasis es mío):Para la primera consulta, no estoy seguro de por qué necesita obtener el nombre a través de la función, ya que la
name
columnasys.triggers
ya le da esa respuesta. Para la segunda consulta, puede unirse asys.triggers
:Podría crear su propia función, por supuesto, pero no conozco ninguna función integrada que haga esta correlación por usted (y, de todos modos, recomiendo mantenerse alejado de las funciones de metadatos integradas ).
Los desencadenantes de DDL son una especie de animal especial. Entonces, si le preocupa también tener que unirse a sys.procedures, sys.views, etc., no lo haga.
fuente