首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

初学触发器,写的触发器有有关问题,

2012-01-22 
初学触发器,写的触发器有问题,请教大家... 我想更改一下ID号为5的姓名.通过触发器判断是否在表中已经存在

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

我想更改一下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

热点排行