與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