【发布时间】:2017-07-01 22:04:24
【问题描述】:
前几天我们发现一个表有一个ModifiedDate 列,但发现没有触发器来实际更新该列。现在我正在尝试编写一个脚本来查找所有具有ModifiedDate 列但没有更新它的触发器的表。
这是我目前所拥有的:
SELECT so.name AS 'TableName', sc.name AS 'ColumnName', tr.name AS 'Trigger'
FROM sys.objects so
INNER JOIN sys.columns sc ON sc.object_id = so.object_id
LEFT JOIN sys.triggers tr ON so.object_id=tr.object_id
WHERE so.type = 'U' AND sc.name LIKE '%ModifiedDate%'
AND tr.type = 'TR'
首先,我想查找同时具有列和触发器的所有表。我能够找到所有带有ModifiedDate 列的表,但是当我添加最后一个过滤器AND tr.type = 'TR' 时,它什么也不返回。我检查了那里的表格,其中包含我正在寻找的列和触发器,所以我希望在列表中看到这些。
【问题讨论】:
-
您对
WHERE的使用会将LEFT OUTER JOIN转换为INNER JOIN。您必须允许NULL值或将适当的条件移至ON子句。 -
@HABO 而事实上他加入了错误的专栏......?他的查询,具有正确的列名 (parent_id) 执行他所需要的。 “首先,我想查找所有同时具有列和触发器的表。”
标签: tsql ssms sql-server-2016