现在有个表,要求某个字段在表中唯一,为了前台系统提示的友好性,选择用触发器而不用唯一索引,我的触发器是这样写的:create trigger [dbo].[tr_m_b_material_standard_relations_i] on [dbo].[t_m_b_material_standard_relations]
for insert
as
begin
if exists(select 1 from INSERTED _a WHERE material_id IN (SELECT material_id FROM dbo.t_m_b_material_standard_relations))
begin
select @msg='物料不允许重复!'
raiserror(@msg,16,1)
rollback tran
return
end
end
现在的问题是,我在表中插入的数据, material_id 字段不重复,触发器也会弹出“物料不允许重复”,这是为什么呢?有没有办法查看一下inserted表里的数据呢?
for insert
as
begin
if exists(select 1 from INSERTED _a WHERE material_id IN (SELECT material_id FROM dbo.t_m_b_material_standard_relations))
begin
select @msg='物料不允许重复!'
raiserror(@msg,16,1)
rollback tran
return
end
end
现在的问题是,我在表中插入的数据, material_id 字段不重复,触发器也会弹出“物料不允许重复”,这是为什么呢?有没有办法查看一下inserted表里的数据呢?
解决方案 »
- SQLSEVER 2000如何通过SQL语句查看正在阻塞进程的阻塞时间?
- 动态SQL,字符串做条件参数,后拼接字符内容丢失?
- 那位哥哥帮小弟看哈我的存储过程的问题哈~!
- 设计一个数据库程序,要求显示数据表中的全部数据,并在每条记录后添加用于修改和删除数据的超链接,并实现数据修改和删除的功能
- 隔离级别的问题
- 时间查询的简单问题!
- 这种情况下,能否用一个查询语句写出来?
- A表A1字段对应B表B1 B2 两个字段的相关性如何做?
- 怎么用命 令行启动MS SQL70数据库,在线等待!
- 年 和 月 分别是一个字段,,怎么查询 开始时间 结束时间
- 帮忙指出一下错误,谢谢。
- 请教一个通过存储过程将ACCESS导入到SQL问题
--for insert,此时insert的记录在表中是已经可以选出来的了
create trigger [dbo].[tr_m_b_material_standard_relations_i] on [dbo].[t_m_b_material_standard_relations]
for insert
as
declare @msg varchar(100);
if (select count(1) from inserted i,t_m_b_material_standard_relations t
where i.material_id=t.material_id)>1
begin
select @msg='物料不允许重复!'
raiserror(@msg,16,1)
rollback tran
return
end
go
--刚才那种写法多条一起插入时有问题,这样写吧
create trigger [dbo].[tr_m_b_material_standard_relations_i] on [dbo].[t_m_b_material_standard_relations]
for insert
as
declare @msg varchar(100);
if exists (select 1 from inserted i,t_m_b_material_standard_relations t
where i.material_id=t.material_id
group by i.material_id
having count(1)>1)
begin
select @msg='物料不允许重复!'
raiserror(@msg,16,1)
rollback tran
return
end
go