如何检查一个表的id是否存在于另一个表使用触发器在SQL Server?



我已经创建了这个触发器,但是当我试图插入或更新记录时,此代码不能正常工作。例如,当我试图将记录插入到客户表中不存在的客户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?

最新更新