我有一个表格,其中包含一个名为ID的自动递增标识/主键列。
CREATE TABLE Table1(
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[TextContent] [nvarchar](450) NOT NULL,
[Version] [bigint] NOT NULL)
当我更新[TextContent]时,我希望[Version]增加1。目的是为每行添加一个版本,在行更新时随之增加。
在单个表格中有合理的方法吗?可能与计算列值和/或触发器有关吗?
我正在通过实体框架使用MSSQL 2008。
感谢您的任何信息!
答案 0 :(得分:3)
方法1
尝试创建TRIGGER
> region1.parent_region = region2
> region2.child_regions
[region1]
> region1.save
> Region.find(region1._id).parent_region
nil
方法2
使用更新命令
每次增加列值以及使用更新命令,如下所示
CREATE TRIGGER incrementValue
ON Table1
FOR Insert
AS
Update Table1
set columnvalue = columnvalue +1
where id in (select id from inserted)
GO
答案 1 :(得分:2)
这是在评论中讨论的更新之后。它只是递增此行的 。
v <- list(v1, v2, v3)
for (p in 1:length(pos)) {
ind <- pos[1:p] == pos[p]
i[p] <- v[[pos[p]]][cumsum(ind)[p]]
}
i
#> [1] "a" "b" "1" "x" "2" "3" "y" "4" "c" "z" "5" "d"
答案 2 :(得分:1)
使用trigger
Create trigger testtrigger
ON Table1
After insert
As
begin
declare @tempIDversion bigint
select @tempIDversion =ID from Table1
insert into Table1(version) values (@tempIDversion)
END
答案 3 :(得分:0)
可能为时已晚,但SQL的 rowversion 数据类型会在每行插入或更新时自动更改。
作为Microsoft explains here的插入或更新,它是所有数据库的计数器:
每个数据库都有一个计数器,该计数器针对在数据库中包含rowversion列的表上执行的每个插入或更新操作递增。此计数器是数据库rowversion。这会跟踪数据库中的相对时间,而不是可以与时钟关联的实际时间。一个表只能有一个rowversion列。每次修改或插入具有rowversion列的行时,会在rowversion列中插入递增的数据库rowversion值。
这不会增加一个Vs.在您尝试实现的列的前一个值时,它只是设置了插入和更新的整个数据库计数器。
但它非常有用,因为它只会在您更新行时更改,并且始终使用更高的值进行更新,您可以将其强制转换为bigint。
你也可以为此目的忘记触发器。