2012-03-01 70 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

相关问题