初学触发器,写的触发器有问题,请教大家...
我想更改一下ID号为5的姓名.通过触发器判断是否在表中已经存在相同姓名,如果有,则回滚,否则提交事务,但是我一更新,总是提示:姓名已存在,可是并没有相同的记录,请问大家 我写的触发器有错吗,非常感激。。。
表名BB,结构和记录如下:
ID NAME CLASS
1小本 1
2张华 1
3王东 2
4国华 2
5小f 1
--创建更新触发器
CREATE TRIGGER trigger_update
ON BBFOR 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