SQL创建表自动递增,一列基于其他列(SQL Create Table that Auto-Incr

2019-10-29 15:26发布

我还是一个初学者用SQL所以请多多包涵。 我需要创建一个从形式储存信息的表。 每种形式具有与它相关联的ID,其具有两个部分。 第一部分是MMYY和第二部分是一个5位数的自动递增的整数。 一个例子ID为0714-00001。 而每一次的变化月份,5位数的编号应该重新开始。 所以,我想的列是这个样子:

订单号。 | 在Order_ID
----------------------------
0714 | 0001
0714 | 技术
0714 | 0003
0814 | 0001
0814 | 技术
0914 | 0001

有没有什么办法让自动递增列重新启动它增加时,SQL-Server中的一个月的变化?

我也看了看四周,几个答案用PHP来做到这一点的建议,但由于我使用的是CMS,我无法进入我自己的任何PHP脚本。

更新:我最终只是写在CMS网站IF语句在表单中输入的order_no无论是在现有的表或不匹配的order_no。 如果他们匹配了新的行会被插入到现有的表,如果他们不匹配,一切从现有的表中的数据将被复制到备份表,对现有表将被截断,然后在新会插入。 从而使表1再次重新开始计数。

Answer 1:

也许你可以写一个after insert trigger ,你可以验证月份是否改变,然后相应地补种的身份。 我试图去描绘你的情景和下面是相同的代码示例

创建和INSERT语句

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');

希望这将让你的想法,并开始。



文章来源: SQL Create Table that Auto-Increments one column based on another column