На днях мы обнаружили таблицу, в которой был столбец 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) выполняет то, что ему нужно. «Для начала я хочу найти все таблицы, в которых есть как столбец, так и триггер». –