SQL Server 2005 - столбец ModifyDate - правильно ли использовать вычисляемый столбец для реализации этого? - PullRequest
5 голосов
/ 13 мая 2010

Я просто хочу, чтобы столбец «ModifyDate» автоматически заполнялся для меня при вставке или обновлении записи.

Должен ли я использовать триггеры или можно использовать вычисляемый столбец?

(с использованием SSMS2005 и SQL Server 2005 Express)

Ответы [ 3 ]

5 голосов
/ 13 мая 2010

Вставить часть легко: просто определите значение по умолчанию для этого столбца, а при вставке новой строки не указывайте значение для этого столбца.

Часть UPDATE сложнее - вам нужно написать триггер , который запускает ON UPDATE , а затем обновить этот столбец. Я не думаю, что есть другой способ сделать это в SQL Server.

Вопрос: вам действительно нужна фактическая календарная дата? Если нет, если вы хотите иметь только «маркер» относительно того, изменилась ли строка, проверьте вместо этого тип столбца ROWVERSION (ранее известный как TIMESTAMP).

Я действительно не понимаю, как вы могли бы использовать для этого вычисляемый столбец - вам нужно где-то хранить эту дату и сохранять ее текущую с помощью INSERT и каждого последующего UPDATE - это сможет сделать только триггер.

3 голосов
/ 13 мая 2010

Я бы посоветовал держаться подальше от триггеров и установить столбец «Дата изменения» с помощью хранимой процедуры, используя функцию сервера getDate.

Пример:

Обновление клиентов Устанавливает FirstName = 'Jim', LastName = 'Jones', DateModified = getDate ()

2 голосов
/ 13 мая 2010

Полагаю, вы подразумеваете ограничение по умолчанию вместо вычисляемого столбца.

Если так, то все в порядке. Я предпочитаю делать это так. Одним из возможных недостатков является то, что клиент может переопределить значение по умолчанию, но если вы не доверяете клиенту, вы также можете обернуть доступ к таблице в хранимых процедурах.

Триггеры тоже будут работать, но триггеры, как правило, создают дополнительную сложность. Ошибки кодирования, которые включают триггеры, являются одними из самых сложных проблем с базами данных.

...