sql server 2000里,关于触发器实现主键功能的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 11:37:14
先定义一个简单的表
CREATE TABLE xb(
xdh char(2) NOT NULL,
xmc char(30) NOT NULL
)
第一次学着使用触发器,想实现xdh的主键功能,即不允许重复
create trigger xb_insert on xb
for insert
as if(exists (select * from xb,inserted where xb.xdh = inserted.xdh))
begin
raiserror('与已存在系代号有冲突',16,1,@xdh)
rollback transaction
end
这样写为什么不对,错在哪里啊?不知道是我哪里的理解出了问题,inserted不是存刚插入的数据嘛,如果在原xb里找到一样的数据,就回滚不执行,可我插入原xb里没有的数据,还是会执行if以下的内容,不明白啊,请指点

那是因为默认都是AFTER触发器,即sql语句先执行了然后触发。
但MSS没有提供BEFORE触发器,你可以看看INSTEAD OF触发器,或者对表结构作些改变,比如添加自增长字段作为主见,然后xdh上建索引等等