日期:2014-05-19  浏览次数:20638 次

初学触发器,写的触发器有问题,请教大家...

我想更改一下ID号为5的姓名.通过触发器判断是否在表中已经存在相同姓名,如果有,则回滚,否则提交事务,但是我一更新,总是提示:姓名已存在,可是并没有相同的记录,请问大家   我写的触发器有错吗,非常感激。。。

表名BB,结构和记录如下:

ID                 NAME                           CLASS      
1 小本             1                  
2 张华             1                  
3 王东             2                  
4 国华             2                  
5 小f               1                  

--创建更新触发器

CREATE   TRIGGER   trigger_update
ON   BB FOR   UPDATE
AS

BEGIN   TRANSACTION

DECLARE   @beforeName   CHAR(6) --新添加的姓名

SELECT   @beforeName=name   FROM   INSERTED--新记隶

PRINT   '新记隶名称 '   +   @beforeName

IF   EXISTS   (SELECT   *   FROM   bb   WHERE   name=@beforeName) --判断新姓名是否已经存在  
BEGIN
PRINT     '姓名已存在 '
ROLLBACK   TRANSACTION
END
ELSE
BEGIN
COMMIT   TRANSACTION  
END

/*更新一条记录*/
  --UPDATE   bb   SET   name= '小猫 '   WHERE   ID=5

------解决方案--------------------
commit部分不用也可以吧

CREATE TRIGGER trigger_update
ON BB
FOR UPDATE
AS

BEGIN TRANSACTION

DECLARE @beforeName CHAR(6) --新添加的姓名

SELECT @beforeName=name FROM INSERTED--新记隶

PRINT '新记隶名称 ' + @beforeName

IF (SELECT count(*) FROM bb WHERE name=@beforeName) <> 0begin
ROLLBACK TRANSACTION
PRINT '姓名已存在 '
end
------解决方案--------------------
用以下这种方法
create table test(uid varchar(4), [name] varchar(5) )
insert test
select '001 ', 'aa ' union all
select '002 ', 'bb '


create trigger roy on test
for insert
as
if exists(select 1 from test,inserted i where test.name=i.name group by test.name having count(*)> 1)
begin
raiserror 50000 '用户已存在! '
rollback tran
return
end