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