与T-SQL的“模块”,如存储过程和函数中,SQLCLR T-SQL包装对象没有存储在数据库中的CREATE
语句。这就是为什么你不能通过sys.sql_modules,OBJECT_DEFINITION或自SQL-Server-2005以及不应该使用的sys.syscomments来访问它们的原因。这就是为什么SQLCLR存储过程和函数必须存储在sys.parameters
相反,CREATE
报表SQLCLR T-SQL包装对象从元数据推断出它们的参数的默认值,就像索引,主键,外键,等
你可以得到所有的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
这就是我现在所做的是一个快速解决方案,但如果我有多个CLR触发器,我想能够区分它们。 – 2010-09-21 22:36:39
我曾希望sys.syscomments表中的文本列将包含您正在查找的外部名称。 – 2010-09-22 00:44:42
@JohnEgbert和Joe:'sys.syscomments'(以及'sys.sql_modules')不包含任何用于SQLCLR T-SQL包装器对象的CREATE语句。但是,你可以做一个简单的查询来获取这个信息,如我的[答案](http://stackoverflow.com/a/32171287/577765)所示。 – 2015-08-23 20:40:07