用触发器禁止不符合数据插入表中

--示例数据库


用主键外键的完整性约束可以控制数据插入,现在这里演示用触发器来限制插入

--定义触发器

if OBJECT_ID('TR_orders_Insert','TR') IS NOT NULL
	DROP TRIGGER TR_orders_Insert;
GO

CREATE TRIGGER TR_orders_Insert ON dbo.orders
AFTER INSERT--触发表完成插入数据以后
AS
--判断插入的数据Custid不存在时执行事务回滚
	IF NOT EXISTS(
		SELECT * FROM orders od
			INNER JOIN inserted as i
				on od.orderid=i.orderid
			INNER JOIN Customers AS Cu
				ON od.CustID=Cu.Custid)
	BEGIN
		RAISERROR ('拒绝数据插入', 16, 1);
		ROLLBACK TRANSACTION;--事务回滚
		
		RETURN;
	END;
	

执行数据插入


--插入数据(customer表中没有custid=10的客户)
insert into orders(custid,orderdate) values(10,'20100511')

--返回结果:
服务器: 消息 50000,级别 16,状态 1,过程 TR_orders_Insert,行 12
拒绝数据插入

猜你喜欢

转载自blog.csdn.net/ilovetheworld/article/details/90717912