日期:2014-05-18  浏览次数:21343 次

sql 中一个列是char类型设置为主键,自动增长 比如1,2,3....,不要改变表的结构,如何用sql语句实现
sql 中一个列是char类型设置为主键,自动增长 比如1,2,3....,不要改变表的结构,如何用sql语句实现

------解决方案--------------------
SQL code

create   table   test
(
SYSID   varchar(10), -- varchar字段
name   varchar(10)
) 

create   trigger   t_insert   on   test 
INSTEAD   OF   insert 
as 
declare   @id   varchar(10),@id1   int 
select   *   into   #tb   from   inserted 

select   @id=max(SYSID)   from   test 
if   @id   is   null 
set   @id1=0 
else 
set   @id1=@id 
update   #tb   set   @id1=@id1+1 
,SYSID= @id1
insert   into   test   select   *   from   #tb 
drop   table   #tb 
go 

insert   into   test(name) 
select   'aa ' 
union   all   select   'bb ' 
union   all   select   'cc ' 
select   *   from   test

SYSID      name
---------- ----------
1          aa 
2          bb 
3          cc 

(3 行受影响)

------解决方案--------------------
挺有趣的题目,花了点时间,研究了一下。
instead of insert 触发器。
SQL code

--表
create table test 
(
id char(10) not null,
value char(10) not null,
constraint pk_test primary key (id) 
)
--触发器
create trigger tri_insert
on test instead of insert
as
declare @id int
if exists(select top 1 id from test)
   select @id = max(convert(int,id))+1 from test   
else
   select @id=1
INSERT INTO test
      SELECT @id,value FROM inserted
--测试
insert into test (id,value) values ('','a')
insert into test (id,value) values ('','b')
select * from test