2017-10-05 1 views
1

で固定された形式の文字列を生成する方法:私は学生を登録したい私はテーブルと大学の管理のためのデータベースを持っているSSMS

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

を。彼または彼女が在籍時にレグノは自動的に生成されます。この形式のように--XXX。

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

学生が特定の部門に登録すると、最後の3つの部分が自動的に増分されます。 はどのようには、SQL Server Management Studioでこれを行うことができます。解決策として

+0

いくつかのサンプルデータ&所望の出力を追加します。 –

答えて

0

1 - キープIDのSEQUENCEを作成します。または、テーブルのIDを使用できます。

CREATE SEQUENCE SeqStudentIDs AS INT 
MINVALUE 1 
CYCLE; 

2 - 挿入後に更新RegNoためTRIGGERを作成します。

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

1つのこと、私がRegNoを部門賢明にしたいのであれば、私は何ができますか?学生がCSE部門に入学する場合と同様に、RegNoの最後の3桁は001であり、次にCSE部門002の次の学生でもあります。その時点でEEE部門に入学した学生はいません。レグノは、あなたが問題を理解していない003、001になりますか? – Rony

+0

異なる部門に異なる 'SEQUENCE'オブジェクトを作成して使用する必要があります。 'SeqStudentIDsForCSE'、' SeqStudentIDsForEEE'などと同様です。 選択した適切なシーケンスのユースケースです。同様に、 'CASE WHEN Department =' EEE '(SeqStudentIDsForEEEの次の値)WHEN ... END、 –

関連する問題