2010-12-13 1 views
3

Я хотел бы знать, как я могу лучше всего реализовать следующую простую стратегию для управления версиями строк в SQL Server 2008. Идея состоит в том, чтобы скопировать поле primary_key в другой столбец (originationg_id в этом случае), чтобы группировать несколько версий/ревизий одного и того же объекта.SQL Server 2008 - привязка значения по умолчанию для другого столбца к первичному ключу

Когда я вставляю исходную строку «version1», я хочу, чтобы столбец origining_id по умолчанию был равен столбцу primary_key. Это автоматически создается базой данных, поэтому я не уверен, как это сделать. Последующие вставки уже будут знать значение для поставки для этого поля.

Пример:

primary_key, originating_id, date_created, some_value 
--------------------------------------------------------------------- 
1   1    13/12/2010 version1 of object A... 
2   1    14/12/2010 version2 of object A... 
3   1    15/12/2010 version3 of object A... 
4   4    15/12/2010 version1 of object B... 

Благодаря.

+0

Конечно, есть еще один столбец в схеме, где-то, что определяет версию строки как относящиеся к объекту В. Если включить, что в вашем вопросе, то вам не нужно хранить первую версию номер для объекта. Вы можете сделать представление, которое будет выглядеть, и присоединиться к представлению, когда это необходимо, без использования всего хранилища. –

ответ

1

Мне кажется, что это таблица, которая хранится рядом с фактическими данными, вы можете сделать несколько вещей с этим в зависимости от того, как вы контролируете свой аудит.

  1. Вы можете использовать SELECT, SCOPE_IDENTITY(), чтобы захватить значение идентификатора после вставки в таблицу, а затем использовать это значение, чтобы сделать вставку в таблицу отчетов
  2. Вы можете использовать триггер «после вставки ", и тогда у вас будет доступ к первичному ключу.

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

+0

+1 Не могу ответить на этот ответ. – amelvin

+0

Митчел, я реализую нечто идентичное. Для точки 1 может ли SELECT SCOPE_IDENTITY() использоваться в определении таблицы для определения значения DEFAULT для столбца или его необходимо использовать в PROC? – StuperUser

+0

SCOPE_IDENTITY() что-то, что используется во время запроса, вы не могли использовать его по умолчанию, так как оно представляет собой последнее значение идентификации, назначенное в той же области, что и текущее исполнение. Тебе придется самому справиться с этим. –

1

Как предлагает Mitchel Sellers, я бы использовал триггер после вставки; в этом триггере вы использовали бы «вставленную» таблицу для исходного идентификатора и возможный столбец some_value. Триггер будет что-то вроде:

CREATE TRIGGER triggername 
    ON tablename 
    AFTER insert 
AS 
BEGIN 

declare @somevalue varchar(max) 
declare @originalid int 
select @somevalue = '<some query to set the description>' 
select @originalid = inserted.tablenameid 

insert into audittable 
select @originalid, getdate(), @somevalue 


END 
+0

спасибо за сообщение, а это помогло при экспериментировании с триггерами. – rob

Смежные вопросы