Sql 引用另一个子元素表的触发器

Sql 引用另一个子元素表的触发器,sql,sql-server,triggers,Sql,Sql Server,Triggers,在SQL Server中有两个表:发票(发票ID、编号、日期、客户、总价值)和发票选择(发票ID、货物、数量、价值) 每笔交易都会将一行插入发票,将一行/多行插入发票选择 我需要在InvoicesElements表中设置触发器,当InvoicesElements表中的Good为“Bike”且客户为“ABC”时,该触发器将引发错误并回滚事务 非常感谢您的帮助 Przemek您想要触发器而不是检查约束的任何原因?不,约束也可以。但如何…你为什么想要触发器而不是检查约束?不,约束也可以。但是如何…谢谢

在SQL Server中有两个表:
发票
(发票ID、编号、日期、客户、总价值)和
发票选择
(发票ID、货物、数量、价值)

每笔交易都会将一行插入
发票
,将一行/多行插入
发票选择

我需要在
InvoicesElements
表中设置触发器,当
InvoicesElements
表中的
Good
为“Bike”且客户为“ABC”时,该触发器将引发错误并回滚事务

非常感谢您的帮助


Przemek

您想要触发器而不是检查约束的任何原因?不,约束也可以。但如何…你为什么想要触发器而不是检查约束?不,约束也可以。但是如何…谢谢。我知道有一些东西——两张桌子上都必须设置条件:好的“自行车”,还有客户的“ABC”。所以…谢谢。我知道有一些东西——两张桌子上都必须设置条件:好的“自行车”,还有客户的“ABC”。所以
ALTER TABLE
        InvoicesElements
ADD CONSTRAINT
        CHK_GOOD
CHECK   (good <> 'Bike' OR good IS NULL)
CREATE TRIGGER
        TR_InvoicesElements_AIU
ON      InvoicesElements
AFTER   INSERT, UPDATE
AS
        IF EXISTS
                (
                SELECT  NULL
                FROM    INSERTED ie
                JOIN    Invoices inv
                ON      inv.id = ie.invoiceId
                WHERE   ie.good = 'bike'
                        AND inv.customer = 'ABC'
                )
                THROW 50000, 'Not sure why but you cannot sell bikes to ABC', 0
GO

CREATE TRIGGER
        TR_Invoices_AIU
ON      Invoices
AFTER   INSERT, UPDATE
AS
        IF EXISTS
                (
                SELECT  NULL
                FROM    InvoiceElements ie
                JOIN    INSERTED inv
                ON      inv.id = ie.invoiceId
                WHERE   ie.good = 'bike'
                        AND inv.customer = 'ABC'
                )
                THROW 50000, 'Not sure why but you cannot sell bikes to ABC', 0
GO