我正在尝试在我的数据库架构中设置表的主键,例如' 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。
答案 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。