Need to list all triggers in SQL Server database with table name and table's schema

SqlSql ServerDatabaseTsqlTriggers

Sql Problem Overview


I need to list all triggers in SQL Server database with table name and table's schema.

I'm almost there with this:

SELECT trigger_name = name, trigger_owner = USER_NAME(uid),table_schema = , table_name = OBJECT_NAME(parent_obj),
  isupdate = OBJECTPROPERTY( id, 'ExecIsUpdateTrigger'), isdelete = OBJECTPROPERTY( id, 'ExecIsDeleteTrigger'),
  isinsert = OBJECTPROPERTY( id, 'ExecIsInsertTrigger'), isafter = OBJECTPROPERTY( id, 'ExecIsAfterTrigger'),
  isinsteadof = OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger'),
  [disabled] = OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') 
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
WHERE type = 'TR'

I just need to get the table's schema also.

Sql Solutions


Solution 1 - Sql

Here's one way:

SELECT 
	 sysobjects.name AS trigger_name 
	,USER_NAME(sysobjects.uid) AS trigger_owner 
	,s.name AS table_schema 
	,OBJECT_NAME(parent_obj) AS table_name 
	,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
	,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
	,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
	,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
	,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
	,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
FROM sysobjects 

INNER JOIN sysusers 
	ON sysobjects.uid = sysusers.uid 
	
INNER JOIN sys.tables t 
	ON sysobjects.parent_obj = t.object_id 
	
INNER JOIN sys.schemas s 
	ON t.schema_id = s.schema_id 
	
WHERE sysobjects.type = 'TR' 

EDIT: Commented out join to sysusers for query to work on AdventureWorks2008.

SELECT 
	 sysobjects.name AS trigger_name 
	,USER_NAME(sysobjects.uid) AS trigger_owner 
	,s.name AS table_schema 
	,OBJECT_NAME(parent_obj) AS table_name 
	,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
	,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
	,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
	,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
	,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
	,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
FROM sysobjects 
/*
INNER JOIN sysusers 
	ON sysobjects.uid = sysusers.uid 
*/	
INNER JOIN sys.tables t 
	ON sysobjects.parent_obj = t.object_id 
	
INNER JOIN sys.schemas s 
	ON t.schema_id = s.schema_id 
WHERE sysobjects.type = 'TR' 

EDIT 2: For SQL 2000

SELECT 
	 o.name AS trigger_name 
	,'x' AS trigger_owner 
	/*USER_NAME(o.uid)*/ 
	,s.name AS table_schema 
	,OBJECT_NAME(o.parent_obj) AS table_name 
	,OBJECTPROPERTY(o.id, 'ExecIsUpdateTrigger') AS isupdate 
	,OBJECTPROPERTY(o.id, 'ExecIsDeleteTrigger') AS isdelete 
	,OBJECTPROPERTY(o.id, 'ExecIsInsertTrigger') AS isinsert 
	,OBJECTPROPERTY(o.id, 'ExecIsAfterTrigger') AS isafter 
	,OBJECTPROPERTY(o.id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
	,OBJECTPROPERTY(o.id, 'ExecIsTriggerDisabled') AS [disabled] 
FROM sysobjects AS o 
/*
INNER JOIN sysusers 
	ON sysobjects.uid = sysusers.uid 
*/	
INNER JOIN sysobjects AS o2 
	ON o.parent_obj = o2.id 
	
INNER JOIN sysusers AS s 
	ON o2.uid = s.uid 
	
WHERE o.type = 'TR'

Solution 2 - Sql

Here you go.

    SELECT
	[so].[name] AS [trigger_name],
	USER_NAME([so].[uid]) AS [trigger_owner],
	USER_NAME([so2].[uid]) AS [table_schema],
	OBJECT_NAME([so].[parent_obj]) AS [table_name],
	OBJECTPROPERTY( [so].[id], 'ExecIsUpdateTrigger') AS [isupdate],
	OBJECTPROPERTY( [so].[id], 'ExecIsDeleteTrigger') AS [isdelete],
	OBJECTPROPERTY( [so].[id], 'ExecIsInsertTrigger') AS [isinsert],
	OBJECTPROPERTY( [so].[id], 'ExecIsAfterTrigger') AS [isafter],
	OBJECTPROPERTY( [so].[id], 'ExecIsInsteadOfTrigger') AS [isinsteadof],
	OBJECTPROPERTY([so].[id], 'ExecIsTriggerDisabled') AS [disabled] 
FROM sysobjects AS [so]
INNER JOIN sysobjects AS so2 ON so.parent_obj = so2.Id
WHERE [so].[type] = 'TR'

A couple of things here...

Also I see that you were attempting to pull the parent tables schema information, I believe in order to do so you would also need to join the sysobjects table on itself so that you can correctly get the schema information for the parent table. the query above does this. Also the sysusers table wasn't needed in the results so that Join has been removed.

tested with SQL 2000, SQL 2005, and SQL 2008 R2

Solution 3 - Sql

You can also get the body of triggers as following:

SELECT      o.[name],
            c.[text]
FROM        sys.objects AS o
INNER JOIN  sys.syscomments AS c
ON      o.object_id = c.id
WHERE   o.[type] = 'TR'

Solution 4 - Sql

I had the same task recently and I used the following for sql server 2012 db. Use management studio and connect to the database you want to search. Then execute the following script.

Select 
[tgr].[name] as [trigger name], 
[tbl].[name] as [table name]

from sysobjects tgr 

join sysobjects tbl
on tgr.parent_obj = tbl.id

WHERE tgr.xtype = 'TR'

Solution 5 - Sql

SELECT
   ServerName   = @@servername,
   DatabaseName = db_name(),
   SchemaName   = isnull( s.name, '' ),
   TableName    = isnull( o.name, 'DDL Trigger' ),
   TriggerName  = t.name, 
   Defininion   = object_definition( t.object_id )

FROM sys.triggers t
   LEFT JOIN sys.all_objects o
      ON t.parent_id = o.object_id
   LEFT JOIN sys.schemas s
      ON s.schema_id = o.schema_id
ORDER BY 
   SchemaName,
   TableName,
   TriggerName

Solution 6 - Sql

Use this query :

SELECT OBJECT_NAME(parent_id) as Table_Name, * FROM [Database_Name].sys.triggers

It's simple and useful.

Solution 7 - Sql

And what do you think about this: Very short and neat :)

SELECT OBJECT_NAME(parent_id) Table_or_ViewNM,
      name TriggerNM,
      is_instead_of_trigger,
      is_disabled
FROM sys.triggers
WHERE parent_class_desc = 'OBJECT_OR_COLUMN'
ORDER BY OBJECT_NAME(parent_id),
Name ;

Solution 8 - Sql

Use This Query :

	SELECT     
		DB_NAME() AS DataBaseName,	
		S.Name AS SchemaName,				
		T.name AS TableName,
		dbo.SysObjects.Name AS TriggerName,
		dbo.sysComments.Text AS SqlContent,
	FROM dbo.SysObjects 
	INNER JOIN dbo.sysComments ON dbo.SysObjects.ID = dbo.sysComments.ID
	INNER JOIN sys.tables AS T ON sysobjects.parent_obj = t.object_id 
	INNER JOIN sys.schemas AS S ON t.schema_id = s.schema_id 
	WHERE dbo.SysObjects.xType = 'TR' 
		AND dbo.SysObjects.Name LIKE 'Permit_AfterInsert' ---- <----- HERE

Solution 9 - Sql

SELECT 
     sysobjects.name AS trigger_name   ,OBJECT_NAME(parent_obj) AS table_name ,s.name AS table_schema 
    ,USER_NAME(sysobjects.uid) AS trigger_owner 
   
   
    ,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
    ,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
    ,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
    ,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
    ,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
    ,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
FROM sysobjects 

INNER JOIN sysusers 
    ON sysobjects.uid = sysusers.uid 

INNER JOIN sys.tables t 
    ON sysobjects.parent_obj = t.object_id 

INNER JOIN sys.schemas s 
    ON t.schema_id = s.schema_id 

WHERE sysobjects.type = 'TR' 

this working for me

Solution 10 - Sql

This is what I use (usually wrapped in something I stuff in Model):

Select
  [Parent] = Left((Case When Tr.Parent_Class = 0 Then '(Database)' Else Object_Name(Tr.Parent_ID) End), 32),
  [Schema] = Left(Coalesce(Object_Schema_Name(Tr.Object_ID), '(None)'), 16),
  [Trigger name] = Left(Tr.Name, 32), 
  [Type] = Left(Tr.Type_Desc, 3), -- SQL or CLR
  [MS?] = (Case When Tr.Is_MS_Shipped = 1 Then 'X' Else ' ' End),
  [On?] = (Case When Tr.Is_Disabled = 0 Then 'X' Else ' ' End),
  [Repl?] = (Case When Tr.Is_Not_For_Replication = 0 Then 'X' Else ' ' End),
  [Event] = Left((Case When Tr.Parent_Class = 0 
                       Then (Select Top 1 Left(Te.Event_Group_Type_Desc, 40)
                             From Sys.Trigger_Events As Te
                             Where Te.Object_ID = Tr.Object_ID)
                       Else ((Case When Tr.Is_Instead_Of_Trigger = 1 Then 'Instead Of ' Else 'After ' End)) +
                             SubString(Cast((Select [text()] = ', ' + Left(Te.Type_Desc, 1) + Lower(SubString(Te.Type_Desc, 2, 32)) +
							                        (Case When Te.Is_First = 1 Then ' (First)' When Te.Is_Last = 1 Then ' (Last)' Else '' End)
                                             From Sys.Trigger_Events As Te
                                             Where Te.Object_ID = Tr.Object_ID
                                             Order By Te.[Type]
                                             For Xml Path ('')) As Character Varying), 3, 60) End), 60)
  -- If you like: 
  -- , [Get text with] = 'Select Object_Definition(' + Cast(Tr.Object_ID As Character Varying) + ')'
From 
  Sys.Triggers As Tr
Order By
  Tr.Parent_Class, -- database triggers first
  Parent -- alphabetically by parent

As you see it is a skosh more McGyver, but I think it's worth it:

Parent                           Schema           Trigger name                     Type MS?  On?  Repl? Event
-------------------------------- ---------------- -------------------------------- ---- ---- ---- ----- -----------------------------------------
(Database)                       (None)           ddlDatabaseTriggerLog            SQL            X     DDL_DATABASE_LEVEL_EVENTS
Employee                         HumanResources   dEmployee                        SQL       X          Instead Of Delete
Person                           Person           iuPerson                         SQL       X          After Insert, Update
PurchaseOrderDetail              Purchasing       iPurchaseOrderDetail             SQL       X    X     After Insert
PurchaseOrderDetail              Purchasing       uPurchaseOrderDetail             SQL       X    X     After Update
PurchaseOrderHeader              Purchasing       uPurchaseOrderHeader             SQL       X    X     After Update
SalesOrderDetail                 Sales            iduSalesOrderDetail              SQL       X    X     After Insert, Update, Delete
SalesOrderHeader                 Sales            uSalesOrderHeader                SQL       X          After Update (First)
Vendor                           Purchasing       dVendor                          SQL       X          Instead Of Delete
WorkOrder                        Production       iWorkOrder                       SQL       X    X     After Insert
WorkOrder                        Production       uWorkOrder                       SQL       X    X     After Update

(Scroll right to see the final and most useful column)

Solution 11 - Sql

this may help.

SELECT DISTINCT	o.[name] AS [Table]
FROM	[sysobjects] o
JOIN	[sysobjects] tr
	ON	o.[id] = tr.[parent_obj]
WHERE	tr.[type] = 'tr'
ORDER BY [Table]

Get a list of tables and all their triggers.

SELECT DISTINCT	o.[name] AS [Table], tr.[name] AS [Trigger]
FROM	[sysobjects] o
JOIN	[sysobjects] tr
	ON	o.[id] = tr.[parent_obj]
WHERE	tr.[type] = 'tr'
ORDER BY [Table], [Trigger]

Solution 12 - Sql

The just above code is incorrect as shown:

SELECT 
    sysobjects.name AS trigger_name 
    --,USER_NAME(sysobjects.uid) AS trigger_owner 
    --,s.name AS table_schema 
    --,OBJECT_NAME(parent_obj) AS table_name 
    --,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
    --,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
    --,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
    --,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
    --,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
    --,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
FROM sysobjects 
/*
INNER JOIN sysusers 
    ON sysobjects.uid = sysusers.uid 
*/  
INNER JOIN sys.tables t 
    ON sysobjects.parent_obj = t.object_id 

INNER JOIN sys.schemas s 
    ON t.schema_id = s.schema_id 
WHERE sysobjects.type = 'TR' 
EXCEPT
SELECT OBJECT_NAME(parent_id) as Table_Name FROM sys.triggers

Solution 13 - Sql

C# Cribs: I ended up with this super generic one liner. Hope this is useful to both the original poster and/or people who just typed the same question I did into Google:

SELECT TriggerRecord.name as TriggerName,ParentRecord.name as ForTableName 
FROM sysobjects TriggerRecord 
INNER JOIN sysobjects ParentRecord ON TriggerRecord.parent_obj=ParentRecord.id 
WHERE TriggerRecord.xtype='TR'

Query Characteristics:

  • Usable with any SQL database (i.e. Initial Catalog)
  • Self explanatory
  • One single statement
  • Pasteable directly into most IDE's for most languages

Solution 14 - Sql

Necromancing.
Just posting because all solutions so far fall a bit short of completeness.

SELECT 
	 sch.name AS trigger_table_schema 
	,systbl.name AS trigger_table_name 
	,systrg.name AS trigger_name 
	,sysm.definition AS trigger_definition 
	,systrg.is_instead_of_trigger
	


	-- https://stackoverflow.com/questions/5340638/difference-between-a-for-and-after-triggers
	-- Difference between a FOR and AFTER triggers?
	-- CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE
	-- Is the same as
	-- CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE
	-- An INSTEAD OF trigger is different, and fires before and instead of the insert 
	-- and can be used on views, in order to insert the appropriate values into the underlying tables.
	-- AFTER specifies that the DML trigger is fired only when all operations 
	-- specified in the triggering SQL statement have executed successfully. 
	-- All referential cascade actions and constraint checks also must succeed before this trigger fires. 
	-- AFTER is the default when FOR is the only keyword specified.
	,CASE WHEN systrg.is_instead_of_trigger = 1 THEN 0 ELSE 1 END AS is_after_trigger 

	,systrg.is_not_for_replication 
	,systrg.is_disabled
	,systrg.create_date 
	,systrg.modify_date
	 
	,CASE WHEN systrg.parent_class = 1 THEN 'TABLE' WHEN systrg.parent_class = 0 THEN 'DATABASE' END trigger_class 

	
	,CASE 
		WHEN systrg.[type] = 'TA' then 'Assembly (CLR) trigger'
		WHEN systrg.[type] = 'TR' then 'SQL trigger' 
		ELSE '' 
	END AS trigger_type 
	 
	-- https://dataedo.com/kb/query/sql-server/list-triggers 
	-- ,(CASE WHEN objectproperty(systrg.object_id, 'ExecIsUpdateTrigger') = 1
	-- 		THEN 'UPDATE ' ELSE '' END 
	-- + CASE WHEN objectproperty(systrg.object_id, 'ExecIsDeleteTrigger') = 1
	-- 		THEN 'DELETE ' ELSE '' END
	-- + CASE WHEN objectproperty(systrg.object_id, 'ExecIsInsertTrigger') = 1
	-- 		THEN 'INSERT' ELSE '' END
	-- ) AS trigger_event 

	,
	( 
		STUFF 
		( 
			( 
				SELECT 
					', ' + type_desc AS [text()]
					-- STRING_AGG(type_desc, ', ') AS foo 
				FROM sys.events AS syse 
				WHERE syse.object_id = systrg.object_id
				FOR XML PATH(''), TYPE 
				-- GROUP BY syse.object_id 
			).value('.[1]', 'nvarchar(MAX)') 
			, 1, 2, '' 
		) 
	) AS trigger_event_groups 
	 
	-- ,CASE WHEN systrg.parent_class = 1 THEN 'TABLE' WHEN systrg.parent_class = 0 THEN 'DATABASE' END trigger_class  
	 
	,'DROP TRIGGER "' + sch.name + '"."' + systrg.name + '"; ' AS sql 
	-- ,systrg.*
FROM sys.triggers AS systrg 

LEFT JOIN sys.sql_modules AS sysm 
	ON sysm.object_id = systrg.object_id 

-- sys.objects for view triggers 
-- LEFT JOIN sys.objects AS systbl ON systbl.object_id = systrg.object_id 

-- inner join if you only want table-triggers 
LEFT JOIN sys.tables AS systbl ON systbl.object_id = systrg.parent_id 

LEFT JOIN sys.schemas AS sch 
	ON sch.schema_id = systbl.schema_id 

WHERE (1=1) 

-- AND sch.name IS NOT NULL 
-- AND sch.name IS NULL 
-- AND sch.name = 'dbo' 
-- And here, exclude some triggers with a certain naming schema 
/*	
AND 
(
	-- systbl.name IS NULL 
	-- OR 
	NOT 
	(
		systrg.name = 'TRG_' + systbl.name  + '_INSERT_History'
		OR 
		systrg.name = 'TRG_' + systbl.name  + '_UPDATE_History'
		OR 
		systrg.name = 'TRG_' + systbl.name  + '_DELETE_History'
	)
)
*/

ORDER BY 
	 sch.name 
	,systbl.name 
	,systrg.name 
	 

Solution 15 - Sql

If you are looking for ALL triggers, remember MS-SQL has both SQL-based triggers (sysobjects.type = 'TR') and CLR-based triggers (sysobjects.type = 'TA').

Solution 16 - Sql

SELECT tbl.name as Table_Name,trig.name as Trigger_Name,trig.is_disabled  
FROM [sys].[triggers] as trig inner join sys.tables as tbl on 
trig.parent_id = tbl.object_id 

Solution 17 - Sql

	CREATE TABLE [dbo].[VERSIONS](
		[ID] [uniqueidentifier] NOT NULL,
		[DATE] [varchar](100) NULL,
		[SERVER] [varchar](100) NULL,
		[DATABASE] [varchar](100) NULL,
		[USER] [varchar](100) NULL,
		[OBJECT] [varchar](100) NULL,
		[ACTION] [varchar](100) NULL,
		[CODE] [varchar](max) NULL,
	 CONSTRAINT [PK_VERSIONS] PRIMARY KEY CLUSTERED 
	(
		[ID] ASC
	)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
	) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
	GO

	ALTER TABLE [dbo].[VERSIONS] ADD  CONSTRAINT [DF_VERSIONS_ID]  DEFAULT (newid()) FOR [ID]
	GO


	DROP TRIGGER [DB_VERSIONS_TRIGGER] ON ALL SERVER

	CREATE TRIGGER [DB_VERSIONS_TRIGGER] ON ALL SERVER FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, 
	CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER, CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION, CREATE_VIEW, ALTER_VIEW, 
	DROP_VIEW, CREATE_TABLE, ALTER_TABLE, DROP_TABLE 
	AS 
	SET NOCOUNT ON SET XACT_ABORT OFF; 
	BEGIN 
		TRY 
			DECLARE @DATA XML = EVENTDATA() 
			DECLARE @SERVER VARCHAR(100) = @DATA.value('(EVENT_INSTANCE/ServerName)[1]','VARCHAR(100)') 
			DECLARE @DATABASE VARCHAR(100) = @DATA.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'VARCHAR(100)') 
			DECLARE @USER VARCHAR(100) = @DATA.value('(/EVENT_INSTANCE/LoginName)[1]','VARCHAR(100)') 
			DECLARE @OBJECT VARCHAR(100) = @DATA.value('(EVENT_INSTANCE/ObjectName)[1]','VARCHAR(100)') 
			DECLARE @ACTION VARCHAR(100) = @DATA.value('(/EVENT_INSTANCE/EventType)[1]','VARCHAR(100)') 
			DECLARE @CODE VARCHAR(MAX) = @DATA.value('(/EVENT_INSTANCE//TSQLCommand)[1]','VARCHAR(MAX)' ) 

			IF OBJECT_ID('DB_VERSIONS.dbo.VERSIONS') IS NOT NULL 
			BEGIN 
				INSERT INTO [DB_VERSIONS].[dbo].[VERSIONS]([SERVER], [DATABASE], [USER], [OBJECT], [ACTION], [DATE], [CODE]) VALUES (@SERVER, @DATABASE, @USER, @OBJECT, @ACTION, getdate(), ISNULL(@CODE, 'NA')) 
			END 
		END 
		TRY 
		BEGIN 
			CATCH 
		END 
	CATCH 
	RETURN

Solution 18 - Sql

SELECT
    OBJECT_NAME(PARENT_OBJECT_ID) AS PARENT_TABLE,
    OBJECT_NAME(OBJECT_ID) TRIGGER_TABLE,
    *
FROM
SYS.OBJECTS
WHERE TYPE = 'TR'

Solution 19 - Sql

No need to join with other tables... all info can be obtained from sys.objects.

SELECT  name as trigger_name
, object_name(parent_obj) as tableName
, object_schema_name(parent_obj) as schemaName 
,OBJECTPROPERTY( id, 'ExecIsUpdateTrigger') AS isupdate 
,OBJECTPROPERTY( id, 'ExecIsDeleteTrigger') AS isdelete 
,OBJECTPROPERTY( id, 'ExecIsInsertTrigger') AS isinsert 
,OBJECTPROPERTY( id, 'ExecIsAfterTrigger') AS isafter 
,OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger') AS isinsteadof 
,OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') AS [disabled] 
FROM    sysobjects s
WHERE s.type = 'TR' 

Solution 20 - Sql

One difficulty is that the text, or description has line feeds. My clumsy kludge, to get it in something more tabular, is to add an HTML literal to the SELECT clause, copy and paste everything to notepad, save with an html extension, open in a browser, then copy and paste to a spreadsheet. example

SELECT obj.NAME AS TBL,trg.name,sm.definition,'<br>'
FROM SYS.OBJECTS obj
LEFT JOIN (SELECT trg1.object_id,trg1.parent_object_id,trg1.name FROM sys.objects trg1 WHERE trg1.type='tr' AND trg1.name like 'update%') trg
 ON obj.object_id=trg.parent_object_id
LEFT JOIN (SELECT sm1.object_id,sm1.definition FROM sys.sql_modules sm1 where sm1.definition like '%suser_sname()%') sm ON trg.object_id=sm.object_id
WHERE obj.type='u'
ORDER BY obj.name;

you may still need to fool around with tabs to get the description into one field, but at least it'll be on one line, which I find very helpful.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRonnie OverbyView Question on Stackoverflow
Solution 1 - SqlJoe StefanelliView Answer on Stackoverflow
Solution 2 - SqlSalizar MarxxView Answer on Stackoverflow
Solution 3 - SqlSerjikView Answer on Stackoverflow
Solution 4 - SqlbsivelView Answer on Stackoverflow
Solution 5 - SqlmmuttamView Answer on Stackoverflow
Solution 6 - SqlBijaN-RView Answer on Stackoverflow
Solution 7 - SqlInfinityGoesAroundView Answer on Stackoverflow
Solution 8 - SqlArdalan ShahgholiView Answer on Stackoverflow
Solution 9 - SqlhtngapiView Answer on Stackoverflow
Solution 10 - SqlStuView Answer on Stackoverflow
Solution 11 - SqlThomasView Answer on Stackoverflow
Solution 12 - SqlProblemSolverView Answer on Stackoverflow
Solution 13 - SqlMr. BView Answer on Stackoverflow
Solution 14 - SqlStefan SteigerView Answer on Stackoverflow
Solution 15 - SqlBrett TView Answer on Stackoverflow
Solution 16 - SqlAbhishek JaiswalView Answer on Stackoverflow
Solution 17 - SqlFreemindedView Answer on Stackoverflow
Solution 18 - SqlB.MuthamizhselviView Answer on Stackoverflow
Solution 19 - SqlDharmendar Kumar 'DK'View Answer on Stackoverflow
Solution 20 - Sqlpatrick boylanView Answer on Stackoverflow