gpt4 book ai didi

sql-server - SQL Server触发器切换Insert、Delete、Update

转载 作者:行者123 更新时间:2023-12-02 13:59:18 25 4
gpt4 key购买 nike

您好,可以在触发器主体上的 DML 命令/操作(插入、删除、更新)之间切换吗?,我尝试摘录一些 T-SQL 以便更好地理解我:

CREATE TRIGGER DML_ON_TABLEA
ON TABLEA
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
SET NOCOUNT ON;

CASE
WHEN (INSERT) THEN
-- INSERT ON AUX TABLEB
WHEN (DELETE) THEN
-- DELETE ON AUX TABLEB
ELSE --OR WHEN (UPDATE) THEN
-- UPDATE ON AUX TABLEB
END
END
GO

谢谢

最佳答案

我将向您展示一种在 SQL Server 2000 或 2005 中检查这一点的简单方法(您忘记提及您正在使用哪个版本),但总的来说,我同意 Remus 的观点,即您应该将它们分解为单独的触发器:

DECLARE @i INT, @d INT;
SELECT @i = COUNT(*) FROM inserted;
SELECT @d = COUNT(*) FROM deleted;
IF @i + @d > 0
BEGIN
IF @i > 0 AND @d = 0
BEGIN
-- logic for insert
END

IF @i > 0 AND @d > 0
BEGIN
-- logic for update
END

IF @i = 0 AND @d > 0
BEGIN
-- logic for delete
END
END

请注意,由于复杂性,这可能无法完全向前兼容 MERGE SQL Server 2008 中引入。有关详细信息,请参阅此连接项:

因此,如果您计划使用 SQL Server 2008 和 MERGE将来,这更有理由将触发器拆分为每种类型的 DML 操作的触发器。

(如果您想有更多理由避免 MERGEread thisthis 。)

关于sql-server - SQL Server触发器切换Insert、Delete、Update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com