Мне дали задание отобразить, когда запись в базе данных была добавлена, однако предыдущие разработчики никогда не создавали для этого поля, и я не могу вернуться и составить даты для всех существующих записей. Есть ли простой способ извлечь дату создания записи из запроса SQL server 2000.
SELECT RECORD_CREATED_DATE FROM tblSomething WHERE idField = 1
RECORD_CREATED_DATE не является полем в существующей таблице. Есть ли какая-то функция SQL для получения этой информации?


Если он не хранится как поле, информация будет потерял после перезапуска журнала транзакций (обычно ежедневно), а может быть, даже раньше.
Я не знаю, как получить эту информацию для существующих записей. Однако в дальнейшем вы можете создать таблицу аудита, в которой хранятся TableName и RecordCreateDate (или что-то подобное.
Затем для соответствующих таблиц вы можете сделать триггер вставки:
CREATE TRIGGER trigger_RecordInsertDate
ON YourTableName
AFTER INSERT
AS
BEGIN
-- T-SQL code for inserting a record and timestamp
-- to the audit table goes here
END
Нет, к сожалению, дата вставки или последнего обновления не сохраняется автоматически для каждой записи.
Для этого вам нужно создать два столбца дата и время в вашей таблице (например, Создано на, Обновление), а затем в триггере ВСТАВЛЯТЬ установить CreatedOn = getdate (), а в триггере ОБНОВИТЬ установить UpdatedOn = getdate ().
CREATE TRIGGER tgr_tblMain_Insert
ON dbo.tblMain
AFTER INSERT
AS
BEGIN
set nocount on
update dbo.tblMain
set CreatedOn = getdate(),
CreatedBy = session_user
where tblMain.ID = INSERTED.ID
END
Мне также нравится создавать столбцы Создан и Обновлено от varchar (20), которые я устанавливаю на session_user или обновляю другими методами.
Я обычно так и делаю, но меня не было рядом, когда этот проект изначально был закончен.
создать еще один столбец и присвоить ему значение по умолчанию getdate (), которое позаботится о вставленной дате, для обновленной даты вам нужно будет написать триггер обновления
С этого момента я бы начал с внесения этой информации. Создайте два столбца: InsertedDate, LastUpdatedDate. Используйте значение по умолчанию getdate () для первого и триггер обновления, чтобы заполнить второй (возможно, также стоит рассмотреть UpdatedBy). Затем я бы написал запрос для отображения информации с помощью оператора CASE, чтобы отобразить дату, если она есть, и отобразить «Неизвестно», если поле имеет значение NULL. Это усложняется, если вам нужно сохранить запись обо всех обновлениях. Тогда вам нужно использовать таблицы аудита.
спасибо, вот что я подумал. вздох. Я надеялся, что был какой-то недокументированный вызов функции или что-то, что материализуется из ниоткуда. Руководители проектов не понимают концепции «невозможно сделать». и в этой ситуации, к сожалению, нет возможности получить нужные данные.