SQL Create Table,根据另一列自动递增一列

时间:2014-06-20 20:41:15

标签: sql sql-server primary-key auto-increment composite-primary-key

我还是SQL的初学者所以请耐心等待。我需要创建一个存储表单信息的表。每个表单都有一个与之关联的ID,它有两个部分。第一部分是MMYY,第二部分是5位自动递增整数。示例ID是0714-00001。每当月份发生变化时,5位数的编号应重新开始。所以,我希望列看起来像这样:

Order_No。 |在Order_ID
----------------------------
0714 | 0001
0714 |技术
0714 | 0003
0814 | 0001
0814 |技术
0914 | 0001

有没有办法让自动递增列重新启动它在SQL-Server中月份更改时递增?

我也环顾四周,很少有人建议使用PHP来做这个,但因为我使用的是CMS,所以我不能输入任何自己的PHP脚本。

更新: 我最后只是在CMS网站上写了一个IF语句,以确定表单中输入的order_no是否与现有表中的order_no匹配。如果它们匹配,则新行将插入到现有表中,如果它们不匹配,则将现有表中的所有数据复制到备份表中,然后将截断现有表,然后新的将是插入。因此允许表再次重新开始计数。

1 个答案:

答案 0 :(得分:0)

您可以编写一个after insert trigger来验证月份是否发生变化,然后相应地重新设置身份。我试图描绘你的场景,下面是相同的示例代码

创建并插入语句

CREATE TABLE Table1
    ([Order_No] varchar(4), [Order_ID] int not null identity)
;

INSERT INTO Table1
    ([Order_No])
VALUES
    ('0714'),('0714'),('0714');

select * from table1;

创建触发器

create trigger trg_reseed on test.dbo.table1
after insert
as 
IF EXISTS (SELECT 1 FROM Table1 t1 
             JOIN inserted i ON t1.[Order_No] = i.[Order_No])
begin
DBCC CHECKIDENT (Table1, reseed, 1)
end

测试场景:

身份种子值没有变化,它会增加到下一个值,因为月份是相同的

INSERT INTO Table1
    ([Order_No])
VALUES
    ('0714');

重新插入标识值,因为插入的月份不同

INSERT INTO Table1
    ([Order_No])
VALUES
    ('0914');

希望这能让你了解并开始使用。