Mar*_*ria 1 sql sql-server sql-server-2012
假设我们有一个叫做表StudentAccount的列SID(学生证)和AmountOwing。我们不能从系统中删除帐户,除非学生的帐户上没有任何欠款。(即AmountOwing = $0.00)。
例如,该表可能如下所示:
SID | Amount Owing
-------+--------------
32415 | $30.00
39872 | $0.00
35135 | $3200.00
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们只能删除第 2 行。
有没有办法使用有效的 MS SQL Server 2012 SQL 语法对表强制执行此约束(以便未受过教育的用户不会意外删除非空帐户)?
尝试这个:
CREATE TRIGGER trgD_StudentAccount_Delete
ON dbo.StudentAccount
INSTEAD OF DELETE
AS
BEGIN
IF EXISTS (
SELECT *
FROM deleted d
WHERE d.AmountOwing <> 0
)
BEGIN
ROLLBACK;
RAISERROR('Delete error: there are students with Amount <> 0', 16, 1);
END
ELSE
BEGIN
DELETE StudentAccount
WHERE EXISTS( SELECT * FROM deleted d WHERE d.[SID] = StudentAccount.[SID] )
END
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |