SQL Server 2008-绑定另一列';将默认值设置为主键
我想知道如何在SQLServer2008中最好地实现以下简单的行版本控制策略。这样做的目的是将主键字段复制到另一列(本例中为originationg_id),以便将同一对象的多个版本/修订组合在一起 当我插入初始的“version1”行时,我希望将原始\u id列默认为主键的列。这是由数据库自动生成的,所以我不知道该怎么做。后续插入将已经知道要为此字段提供的值 例如:SQL Server 2008-绑定另一列';将默认值设置为主键,sql,sql-server,Sql,Sql Server,我想知道如何在SQLServer2008中最好地实现以下简单的行版本控制策略。这样做的目的是将主键字段复制到另一列(本例中为originationg_id),以便将同一对象的多个版本/修订组合在一起 当我插入初始的“version1”行时,我希望将原始\u id列默认为主键的列。这是由数据库自动生成的,所以我不知道该怎么做。后续插入将已经知道要为此字段提供的值 例如: primary_key, originating_id, date_created, some_value ----------
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...
谢谢。在我看来,这是一个与实际数据一起存储的表,您可以使用它做一些事情,具体取决于您如何控制审计
如果您出于某种奇怪的原因在同一个表中执行此操作,我建议您考虑可能的不同策略,因为很难查询此长期策略的“最新”版本。正如Mitchel Sellers所建议的,我将使用插入后触发器;在该触发器中,您将使用“inserted”表作为原始id和可能的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
创建触发器触发器名称
关于表名
插入后
作为
开始
声明@somevalue varchar(最大值)
声明@originalid int
选择@somevalue=''
选择@originalid=inserted.tablenameid
插入到审核表中
选择@originalid,getdate(),@somevalue
结束
在您的模式中肯定有另一列将版本行定义为与对象B相关。如果您在问题中包含了该列,则不需要存储对象的第一个版本号。您可以创建一个视图来查找它,并在必要时加入该视图,而无需所有存储。同样感谢您的帖子-它在尝试触发器时提供了帮助。Mitchel,我正在实现一些相同的功能。对于第1点,SELECT SCOPE_IDENTITY()可以在表定义中用于定义列的默认值,还是必须在PROC中使用?SCOPE_IDENTITY()在查询时使用,不能将其用作默认值,因为它表示在与当前执行相同的作用域中分配的最后一个标识值。你必须自己处理这件事。