假设我有A,B和C列。其中A,B和C组成了主键(复合键)。我想发生的事情是,每当我在A / B上执行插入操作时,C列应仅针对该特定组合而增加一。
基本上,C将跟踪A / B组合的版本。在一起,所有枚举仍然应该都是唯一的。
这是我希望表格在插入后的样子:
我基本上想要基于A / B组的1种子。
关于如何实现此目标的任何想法?我想我需要一个触发器,然后计算A / B列当前C的最大值?
答案 0 :(得分:1)
在大多数情况下,这是不值得的。保证序列号是相当复杂的-如果考虑到更新和删除,则更是如此。
另一种方法是使用一个标识列作为表的主键。然后,如果您需要一个序列号,则可以使用:
select a, b, row_number() over (partition by a, b, order by table_id) as c
如果您真的想创建这样一个数字,则需要一个insert
触发器来进行计算-并锁定整个表,以防其他操作插入相同的a
/ {{ 1}}值。您还需要b
和update
的触发器。
答案 1 :(得分:0)
您需要一个触发器。像这样:
CREATE TRIGGER [dbo].[tAI_AB]
ON [dbo].[AB]
AFTER INSERT
AS
DECLARE @A INT;
DECLARE @B INT;
DECLARE @C INT;
BEGIN
SET NOCOUNT ON;
Set @A = (Select A from inserted);
Set @B = (Select B from inserted);
Set @C= (Select isnull(Max(C), 0) From AB where A=@A and B=@B);
UPDATE AB Set C = @C+1 WHERE A=@A and B=@B and C is null;
END
只需更改为适当的A和B类型以及列/表名称即可。