Contrairement à T-SQL "modules" tels que les procédures stockées et fonctions, les objets wrapper T-SQL SQLCLR ne disposent pas de leurs déclarations CREATE
stockées dans la base de données. C'est pourquoi vous ne pouvez pas y accéder via sys.sql_modules, OBJECT_DEFINITION, ou le obsolète-depuis-SQL-Server-2005-and-should-not-be-used sys.syscomments. C'est pourquoi SQLCLR Procédures stockées et fonctions doivent avoir leurs paramètres valeurs par défaut stockées dans sys.parameters
Au lieu de cela, CREATE
déclarations pour les objets wrapper T-SQL SQLCLR sont déduites de méta-données, comme index, clés primaires, clés étrangères, etc.
Vous pouvez obtenir toutes les parties de la déclaration CREATE TRIGGER
de la requête suivante:
SELECT OBJECT_SCHEMA_NAME(st.[object_id]) AS [SchemaName],
st.[name] AS [TriggerName],
OBJECT_SCHEMA_NAME(st.parent_id) AS [ParentSchemaName],
OBJECT_NAME(st.parent_id) AS [ParentName],
st.is_instead_of_trigger,
SUBSTRING((
SELECT N', ' + ste.[type_desc]
FROM sys.trigger_events ste
WHERE ste.[object_id] = st.[object_id]
FOR XML PATH ('')
), 3, 500) AS [Actions],
QUOTENAME(sa.name) AS [AssemblyName],
QUOTENAME(sam.assembly_class) AS [AssemblyClass],
QUOTENAME(sam.assembly_method) AS [AssemblyMethod]
FROM sys.triggers st
INNER JOIN sys.assembly_modules sam
ON sam.[object_id] = st.[object_id]
INNER JOIN sys.assemblies sa
ON sa.[assembly_id] = sam.[assembly_id]
WHERE st.parent_class = 1; --- OBJECT_OR_COLUMN
C'est ce que je fais maintenant comme une solution rapide, mais si j'ai plusieurs déclencheurs CLR, je veux être capable de les différencier. –
J'avais espéré que la colonne de texte de la table de sys.syscomments contiendrait le nom externe que vous cherchiez. –
@JohnEgbert et Joe: 'sys.syscomments' (de même que' sys.sql_modules') ne contient aucune instruction 'CREATE' pour les objets encapsuleurs T-SQL SQLCLR. Cependant, vous pouvez faire une requête simple pour obtenir cette information comme indiqué dans ma [réponse] (http://stackoverflow.com/a/32171287/577765). –