我还是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匹配。如果它们匹配,则新行将插入到现有表中,如果它们不匹配,则将现有表中的所有数据复制到备份表中,然后将截断现有表,然后新的将是插入。因此允许表再次重新开始计数。
答案 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');
希望这能让你了解并开始使用。