MS SQL触发器的问题,如何加条件判断,如果条件不满足,不执行插入操作,具体看注释部分
createtriggerJieShuon图书借阅表forinsertasbegindeclare@shintselect@sh=书号frominsertedifexis...
create trigger JieShu
on 图书借阅表
for insert
as
begin
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
print '您所借的书不存在!'
--如何加条件,当所借的书不存在时,不插入记录到图书借阅表?
end
--插入操作:insert 图书借阅表 values(6,'C语言',getdate(),getdate()+30,'张三,'李四') 展开
on 图书借阅表
for insert
as
begin
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
print '您所借的书不存在!'
--如何加条件,当所借的书不存在时,不插入记录到图书借阅表?
end
--插入操作:insert 图书借阅表 values(6,'C语言',getdate(),getdate()+30,'张三,'李四') 展开
3个回答
展开全部
用ROLLBACK或者RAISERROR,或者两个一起用。
create trigger JieShu
on 图书借阅表
for insert
as
begin
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
BEGIN
RAISERROR ('您所借的书不存在!书号:%d', 16, 1, @sh)
ROLLBACK TRANSACTION
END
end
create trigger JieShu
on 图书借阅表
for insert
as
begin
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
BEGIN
RAISERROR ('您所借的书不存在!书号:%d', 16, 1, @sh)
ROLLBACK TRANSACTION
END
end
2011-06-12
展开全部
希望对你有所帮助
CREATE TRIGGER tr_zd_goods_del ON dbo.zd_goods
FOR DELETE
AS
Declare
@goodsID int,
@goodsdm varchar(12)
SELECT @goodsID=goodsid,@goodsdm=goodsdm
FROM deleted
IF Exists(select top 1 goodsid from BOM_goodsbh where goodsID=@goodsID) GOTO test --BOM中
Return
test:
begin
raiserror('此项(%s)已被引用,不能执行删除操作,如需删除请联系管理员!',16,1,@goodsdm)
rollback tran
end
CREATE TRIGGER tr_zd_goods_del ON dbo.zd_goods
FOR DELETE
AS
Declare
@goodsID int,
@goodsdm varchar(12)
SELECT @goodsID=goodsid,@goodsdm=goodsdm
FROM deleted
IF Exists(select top 1 goodsid from BOM_goodsbh where goodsID=@goodsID) GOTO test --BOM中
Return
test:
begin
raiserror('此项(%s)已被引用,不能执行删除操作,如需删除请联系管理员!',16,1,@goodsdm)
rollback tran
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可用事务rollback tran语句:
begin
begin transaction
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
rollback tran
print '您所借的书不存在!'
commit tran
end
begin
begin transaction
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
rollback tran
print '您所借的书不存在!'
commit tran
end
更多追问追答
追问
额,出错了
您所借的书不存在!
消息 3902,级别 16,状态 1,过程 JieShu,第 17 行
COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
语句已终止。
追答
那你把commit tran放到else前面试下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询