我已经创建了这个触发器,但是当我试图插入或更新记录时,此代码不能正常工作。例如,当我试图将记录插入到客户表中不存在的客户id的订单表时,它应该显示消息"是"而不是"否"。只是需要你帮忙检查我错在哪里。由于
CREATE TRIGGER trg_checkKey
ON ORDER
AFTER INSERT, UPDATE
AS
BEGIN
IF EXISTS (SELECT 1
FROM inserted
JOIN
(SELECT ID FROM Order
UNION ALL
SELECT ID FROM Customer) Order_Customer ON Order_Customer.ID = inserted.ID)
BEGIN
PRINT 'Yes';
END
ELSE
BEGIN
PRINT 'NO'
END
-- THROW 98765, N'The Trigger check Chktrg_OrderRange on the table ''dbo.YourTable'' failed. The column ''order_limits'' must be more than or equal to one and less than or equal to 10.', 16;
END
从评论来看,这似乎是另一个试图让方形钉子穿过圆孔的例子。就像在你的另一个问题中,这不是TRIGGER
的作用;CONSTRAINT
是你需要使用的。
你应该在这里使用FOREIGN KEY
CONSTRAINT
。停止滥用TRIGGER
;它们不是用来解决它们可以用内置功能:
ALTER TABLE dbo.[Order] ADD CONSTRAINT FK_OtherTable_YourTable_ID --ORDER is a reserved keyword, don't use it for object names
FOREIGN KEY (ID) REFERENCES dbo.Customer (ID); --If the Customer is the ID, what is the ID for the Order called?