SQL Server 2005 Автоматически обновляемый столбец DateTime - последнее обновление

У меня была такая же проблема и она была решена, возможно, не лучшим образом, но она работает. Я заменил все разрывы строк до того, как достиг своего реального соответствия:

mystring= Regex.Replace(mystring, "\r\n", "")

Я манипулирую HTML, поэтому разрывы строк для меня в этом случае не имеют большого значения.

Я попробовал все вышеперечисленные предложения без везения, я использую .Net 3.5 FYI

13
задан Juan Mellado 2 May 2012 в 00:14
поделиться

5 ответов

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

4
ответ дан Guillermo Gutiérrez 2 May 2012 в 00:14
поделиться

Я соглашаюсь с другими - устанавливает значение по умолчанию GetDate () на столбце LastUpdate и затем используют триггер для обработки любых обновлений.

Просто что-то простое как это:

CREATE TRIGGER KeepUpdated on Profiles
FOR UPDATE, INSERT AS 
UPDATE dbo.Profiles 
SET LastUpdate = GetDate()
WHERE Username IN (SELECT Username FROM inserted)

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

Рассматривают это...

  • 7:00 - Пользователь 'jsmith' создается с фамилией 'Smithe' (ой), значений по умолчанию LastUpdate к 7:00

  • 8:00 - 'jsmith' электронные письма IT для высказывания его зовут неправильный. Вы сразу выполняете обновление, таким образом, фамилией является теперь 'Smith' и (благодаря триггеру), LastUpdate показывает 8:00

  • 14:00 - Ваш более слабый коллега наконец скучает с StumbleUpon и проверяет свою электронную почту. Он видит более раннее сообщение от 'jsmith' относительно смены имени. Он работает: Профили ОБНОВЛЕНИЯ УСТАНАВЛИВАЮТ LastName =' Smith' ГДЕ Имя пользователя ='jsmith' , и затем возвращается к перемещающейся MySpace. Триггер не заботится, что фамилией уже был 'Smith', однако, таким образом, LastUpdate теперь показывает 14:00.

при просто слепом изменении LastUpdate каждый раз, когда оператор обновления работает, это ТЕХНИЧЕСКИ корректно, потому что обновление действительно происходило, но, вероятно, имеет больше смысла на самом деле сравнивать изменения и действие соответственно. Тем путем оператор Update 14:00 коллегой все еще работал бы, но LastUpdate все еще покажет 8:00.

- Kevin

24
ответ дан Kevin Fairchild 2 May 2012 в 00:14
поделиться

Вы оказываетесь перед необходимостью использовать триггеры для этого.

2
ответ дан Kibbee 2 May 2012 в 00:14
поделиться

Мое предложение состояло бы в том, чтобы создать хранимую процедуру, которая принимает значение по умолчанию lastUpdate к getdate ().

я старался избегать триггеров в прошлом, потому что определение местоположения pre-SQL2005 и редактирование их были болью в огузке. Специально для разработчиков, которые плохо знакомы с Вашим проектом.

Также добавляют что как значение по умолчанию для Вашего определения столбца.

-1
ответ дан Rob Allen 2 May 2012 в 00:14
поделиться

Я согласен с идеей триггера, хотя я бы использовал объединение для вставки вместо подзапроса. Тем не менее, я хочу отметить, что имя пользователя является особенно плохим выбором для первичного ключа. Имена пользователей часто меняются, и когда они происходят, вам нужно изменить все связанные таблицы. Гораздо лучше иметь идентификатор пользователя в качестве ключа, а затем поставить уникальный индекс для имени пользователя. Затем, когда имя пользователя меняется, вам больше ничего не нужно менять.

3
ответ дан 1 December 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: