2017-10-05 53 views
1

我对大学管理数据库与表:如何生成固定格式的字符串在SSMS

Department(Id, Name, Code) Student(Id, Name, Email, EnrollDate, RegNo, Department)

我要报名的学生。当他或她参加RegNo会自动生成。像这种格式--XXX。

Example : CSE-2017-001, EEE-2016-002, BBA-2014-015. 

最后3部分增加自动当一个学生注册一个特定的部门。 如何在Sql Server Management Studio中执行此操作。

+0

添加一些示例数据和所需的输出。 –

回答

0

作为解决方案。

1 - 为保留ID创建SEQUENCE。或者你可以使用表格标识。

CREATE SEQUENCE SeqStudentIDs AS INT 
MINVALUE 1 
CYCLE; 

2 - 插入后创建TRIGGER进行更新RegNo

CREATE TRIGGER TRG_Student_ForCreateRegNo ON Student AFTER INSERT 
AS 
BEGIN 
    UPDATE Student set 
     RegNo = CONCAT((SELECT TOP 1 Code FROM Department WHERE Id = inserted.Department) , '-' , DATEPART(YEAR,inserted.EnrollDate), '-', RIGHT('000' + CONVERT(VARCHAR,(NEXT VALUE FOR SeqStudentIDs)),3)) 
    FROM Student INNER JOIN inserted ON Student.Id = inserted.Id 
END 
+0

非常感谢:) – Rony

+0

有一件事,如果我想RegNo作为部门的智慧,我该怎么办?就像在CSE部门注册的学生一样,他的RegNo的最后3位数字是001,然后是在CSE部门002的下一位学生。那时没有学生注册EEE部门,但当一名学生注册EEE部门时,他的最后3位数字RegNo将是001,而不是003。你是否理解这个问题? – Rony

+0

您需要为不同的部门创建和使用不同的'SEQUENCE'对象。像'SeqStudentIDsForCSE','SeqStudentIDsForEEE'等 和用例来选择适当的序列。例如,'CASE当Department ='EEE'THEN(SeqStudentIDsForEEE的​​下一个值)当... END时, –

相关问题