设置具有给定前缀的主键和对数据库的自动增量

时间:2014-07-04 08:32:36

标签: sql sql-server

我正在尝试在我的数据库架构中设置表的主键,例如' A01406V000001 '。
'014'表示年份(2014)
'06'表示月(六月)
'000001'是每个AXXXXX前缀的自动增量编号。

*更多解释
My SQL Schema Here (SQL Fiddle)
表格中有两行。(' A01405V00001 '和' A01406V00001 ')
我想使用 AccidentID =' A01406V000002 ',' A01406V000003 ',' A01406V000004 '插入新元素,...每次给出前缀为' A01406 '

我认为我必须创建触发器,但我还没有了解这一点 我正在搜索 SQL Trigger 但它看起来很复杂。我尝试了像

这样的东西
CREATE TRIGGER accident_trigger
BEFORE INSERT ON accident
FOR EACH ROW
BEGIN
INSERT INTO accident(Date, 
                     Time, 
                     Location, 
                     City, 
                     AssClaimNo, 
                     LitClaimNo, 
                     AssID, 
                     LitID, 
                     CLicenPlateNumber)
 VALUES ('20 June 2014', 
         '14:00', 
         'Bangkok, Thailand', 
         'Bangkok', 
         NULL, 
         NULL, 
         '20140700b', 
         '201407b00', 
         'กน5019');
SET NEW.AccidentID = CONCAT('A', 
                            Right(Cast(Year(GetDate()) as varchar(10)),2),
                            Right('0' + Cast(Month(GetDate()) as varchar(10)),2),
                            'V', 
                            LPAD(LAST_INSERT_ID(), 6,'0'));
END;

(我也尝试使用存在来获得年份和月份 SQL中的函数) 当然,我不工作。

感谢您提供所有解决方案或建议。

聚苯乙烯。我已经看过了 Is there a way to insert an auto-incremental primary id with a prefix in mysql database?
How do I add a autoincrement primary key in sql server with nvarchar?

[编辑]
我使用SQL Server而不是Apache Derby。

1 个答案:

答案 0 :(得分:0)

我的解决方案是:

DECLARE @ROWS INTEGER;
    DECLARE @PREFIX VARCHAR(4) = ?;
    BEGIN
        SET @ROWS = (SELECT COUNT(*)
        FROM LITIGANT
        WHERE LITID LIKE 'L'+@PREFIX+'%');
    END;

    SET @ROWS = @ROWS + 1;
    INSERT INTO LITIGANT (LITID, LNAME, LEMAIL, LTELNUMBER, LDRIVERLICENSE, LCARBRAND, LCARCOLOR, LCARLICENPLATE, LINSNAME, LINSNUMBER)
        VALUES('L' + @PREFIX + RIGHT('000'+CAST(@ROWS AS VARCHAR(4)),4),
            ?, ?, ?, ?, ?, ?, ?, ?, ?);

当给出前缀= 1407

时,此语句产生 L14070001

**此解决方案适用于SQL Server。