2012-03-01 36 views
1

我想根據學生的部門爲學生生成唯一的ID。 當部門ID爲CS時,我想讓學生ID爲CS0448,IT部門ID爲IT0448等等。這些ID必須加1。基於另一個表的唯一ID自動增加表格的字母數字ID

我認爲我會爲每個學生增加1個身份和自動增量,並將其與部門ID連接起來,但這不會對我有幫助。它會導致在IT0448旁邊添加的IT學生成爲IT0449。請幫我解決一下這個。看到這...這一定是這樣的..

... 
cs0439 
it0441 
cs0440 
it0442 
cs0441 
cs0442 

請讓我知道一個字母標識更好的選擇

+1

什麼版本的SQL Server? – 2012-03-01 05:46:27

回答

2

你可以嘗試的INSTEAD OF INSERT觸發器,像這樣:

create table students(id varchar(10) primary key not null, Department varchar(2), Name varchar(80)) 
go 

create trigger students_insert_PK 
    on students 
    INSTEAD OF INSERT 
as 
    declare @id int; 
    declare @dept varchar(2); select @dept=Department from INSERTED; 
    select @id=cast(max(right(id,4)) as int) from students where [email protected]; 
    set @id=isnull(@id,0)+1; 

    insert into students 
    select Department+right('0000'+cast(@id as varchar(4)),4) 
    , Department 
    , name 
    from INSERTED; 
go 

insert into students (Department,Name) values ('CS','John'); 
insert into students (Department,Name) values ('CS','Pat'); 
insert into students (Department,Name) values ('CS','Sheryl'); 
insert into students (Department,Name) values ('IT','Phil'); 
insert into students (Department,Name) values ('EE','Frank'); 
insert into students (Department,Name) values ('EE','Amy'); 
insert into students (Department,Name) values ('EE','Stu'); 
go 

select * from students; 
go 

結果:

enter image description here

+0

Is there一種方式,我可以返回此觸發器生成的此ID到插入被調用的點。像是,如果我需要顯示一個對話框,「創建ID爲cs0001的學生」 – smrpm 2012-03-27 10:14:43

+0

請@ @身份的竅門??請幫助我.. – smrpm 2012-03-27 10:21:00

+1

@@ identity將不會返回觸發器定義的標識,所以我會通過編寫一個縮放器函數來檢索它,該函數只是以與觸發器相同的方式計算id,除非沒有+1。所以你可以通過調用這個函數來獲得最後一個id,SELECT dbo.getLastID(Department); – 2012-03-28 04:41:46

2

你可以使用一個trigger BEFORE insert,改變根據ID值你的邏輯。

基本上你會做正常的選擇來獲得下一個ID和類型(IT或CS),你應該已經擁有了它(我認爲)。

+0

+ 1簡單地使用觸發器,也有很多的例子,例如:: http://stackoverflow.com/questions/6537555/sql-trigger-to-concatenate-count-where-column-with-padding – 2012-03-01 06:00:15

相關問題