SQL创建基于另一列自动递增一列的表
我还是SQL的初学者,所以请耐心听我说。我需要创建一个存储表单信息的表。每个表单都有一个与之关联的ID,该ID由两部分组成。第一部分是MMYY,第二部分是一个5位数的自增整数。示例ID是0714-00001。每次月份变化时,5位数字的编号都应该重新开始。所以,我想让这些列看起来像这样: 订单号|订单IDSQL创建基于另一列自动递增一列的表,sql,sql-server,primary-key,auto-increment,composite-primary-key,Sql,Sql Server,Primary Key,Auto Increment,Composite Primary Key,我还是SQL的初学者,所以请耐心听我说。我需要创建一个存储表单信息的表。每个表单都有一个与之关联的ID,该ID由两部分组成。第一部分是MMYY,第二部分是一个5位数的自增整数。示例ID是0714-00001。每次月份变化时,5位数字的编号都应该重新开始。所以,我想让这些列看起来像这样: 订单号|订单ID------------------------------- 0714 | 0001 0714 | 0002 0714 | 0003 0814 | 0001 0814 | 0002 0914 |
-------------------------------
0714 | 0001
0714 | 0002
0714 | 0003
0814 | 0001
0814 | 0002
0914 | 0001
有没有办法让自动递增列在SQL Server中的月份发生变化时重新开始递增 我也环顾四周,很少有人建议使用PHP来实现这一点,但因为我使用的是CMS,所以我无法输入任何自己的PHP脚本 更新:
最后,我在CMS网站上写了一条IF语句,说明表单中输入的订单号是否与现有表中的订单号匹配。如果它们匹配,新行将插入到现有表中,如果它们不匹配,现有表中的所有数据将复制到备份表中,现有表将被截断,然后插入新行。因此,允许表再次在1处重新开始计数 您可能可以在插入触发器后编写一个
,
验证月份是否更改,然后相应地重新设定标识。我试图描述您的场景,下面是相同场景的示例代码
创建和插入语句
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');
希望这能让您了解情况并开始使用。安排a在指定的时间间隔内跑步。让它在该列上执行一次重新设置id。非常感谢您的回答。但我认为这个解决方案只有一个问题。我将无法创建主键。如果只有Order_ID是主键,则不会进行重新播种,因为它不再是唯一的数字。但我也不能创建复合主键,因为Order_ID列是自动递增的。@user3694592,部分正确;因为你确实可以创建一个复合键。同样,这个答案是根据你的帖子(你想要达到的)。若您将标识列设为PK,那个么您永远不能为其重新设定种子(这将违反PK约束)。现在你可以选择怎么走了。谢谢你,我想我还是把主键放下吧。最后,我将新的重新设定种子的值更改为0,以获得从1开始的自动增量。谢谢你的帮助!