В отличие от «модулей» T-SQL, таких как хранимые процедуры и функции, у объектов-оболочек T-SQL SQLCLR нет своих операторов CREATE
, хранящихся в базе данных. Вот почему вы не можете получить к ним доступ через sys.sql_modules , OBJECT_DEFINITION или устаревший, так как SQL-Server-2005-и-не-не-используемый sys.syscomments . Вот почему хранимым процедурам и функциям SQLCLR необходимо сохранять значения параметров по умолчанию в sys.parameters
Вместо этого CREATE
операторы для объектов-оболочек T-SQL SQLCLR выводятся из метаданных, так же как индексы, первичные ключи, внешние ключи и т. Д.
Вы можете получить все части оператора CREATE TRIGGER
из следующего запроса:
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