请教:insert触发器问题
表a有一个唯一主键为Pid
现在想通过触发器在insert 时候将该字段值自动增长1
不想用自增长ID;
不知到能否实现,如果能该如何实现???
问题点数:50、回复次数:9Top
1 楼huailairen(流浪猫--很想养只猫,带着它到处流浪。)回复于 2006-03-14 19:23:43 得分 10
可以啊
create table autoadd(a char(5),b varchar(5))
--drop table autoadd
--drop trigger tr_autoadd
go
create trigger tr_autoadd
on autoadd
instead of insert
as
begin
declare @m varchar(5)
declare @n int
--select * from inserted
select @m=b from inserted
if (select count(*) from autoadd)=0
begin
insert into autoadd values('00001',@m)
end
else
begin
select @n=max(cast(a as int))+1 from autoadd
insert into autoadd values(replicate('0',5-len(cast(@n as varchar(5))))+cast(@n as varchar(5)),@m)
end
if @@error<>0
begin
rollback tran
end
endTop
2 楼wgsasd311(自强不息)回复于 2006-03-14 19:36:34 得分 10
现在想通过触发器在insert 时候将该字段值自动增长1
=======>如果一次性插入一批数据呢?Top
3 楼zjcxc(邹建)回复于 2006-03-14 20:08:40 得分 20
create trigger tr_insert on 你的表
instead of insert -- 注意触发器类型
as
if @@rowcount = 0 return
select * into # from inserted
declare @pkid int
select isnull(max(pid),0) from 你的表
update # set pid=@pkid, @pkid=@pkid+1
insert 你的表 select * from #Top
4 楼wgsasd311(自强不息)回复于 2006-03-14 20:36:10 得分 0
--老大的方法可以处理批量插入,但忘了给变量赋值
create trigger tr_insert on 你的表
instead of insert -- 注意触发器类型
as
if @@rowcount = 0 return
select * into # from inserted
declare @pkid int
select @pkid=isnull(max(pid),0) from 你的表
update # set pid=@pkid, @pkid=@pkid+1
insert 你的表 select * from #
Top
5 楼Anders_lt(突破渴望)回复于 2006-03-14 20:56:11 得分 0
markTop
6 楼mm2love2zz(never stop.)回复于 2006-03-15 00:25:29 得分 5
create trigger tr_insert on tb
for insert
as
begin
declare @num int,@pid int
select @num=count(pid) from tb
if @num=0
begin
update inserted set pid=1
end
else
begin
select @pid=max(pid) from tb
update inserted set pid=@pid+1
end
end if
select into tb from inserted
end
goTop
7 楼scmail81(琳·风の狼(修罗))回复于 2006-03-15 08:32:07 得分 5
create table A
(
pid int,
T_Test varchar(10)
)
CREATE TRIGGER TEMP_SC on A
INSTEAD OF Insert
as
declare @MAx int
declare @T table (id int IDENTITY (1,1)NOT NULL,T_Test varchar(10))
insert @T select T_Test from inserted
select @MAx=isnull(max(pid),0) from A
insert A select id+@MAx,T_Test from @TTop
8 楼cjjll(潇潇风雨)回复于 2006-03-15 09:21:47 得分 0
楼上都是牛人:看了应该没得问题,准备领分吧Top
9 楼zjdyzwx(十一月猪)回复于 2006-03-15 10:25:04 得分 0
CREATE TABLE TEMP5
(
ID INT,
NAME VARCHAR(8)
)
ALTER TRIGGER TEMP5I ON TEMP5
INSTEAD OF INSERT
AS
BEGIN
DECLARE @I INT
SELECT @I = COUNT(*) FROM TEMP5
WHERE 1 = 1
SELECT @I =@I + 1
INSERT INTO TEMP5
SELECT @I , NAME FROM INSERTED
END
Top




