标记应使用在触发前或触发后

问题描述 投票:0回答:1

我有一栏 STag,数据类型为 bit另一栏 SFile 数据类型为 VARBINARY(MAX).

当Web应用程序调用更新此表时,我的触发器将更新 STag = 1SFile 有数据,反过来,更新 STag = 0SFile 被清空。

    CREATE TRIGGER [STag_UPDATE] 
    ON [Employee] 
    AFTER UPDATE
    AS
        DECLARE @EMPLOYEEID AS INT;
    BEGIN
        SET NOCOUNT ON;

        SELECT @EMPLOYEEID = EmployeeId 
        FROM inserted

        UPDATE EMPLOYEE 
        SET STag = CASE 
                       WHEN LEN(SFile) > 0 THEN 1
                       ELSE 0
                    END
        WHERE EmployeeId = @EMPLOYEEID
    END
    GO

    ALTER TABLE [dbo].[Employee] ENABLE TRIGGER [STag_UPDATE]
    GO

我的问题是:这样写触发器合适吗?或者我应该用 instead of?

sql-server triggers sql-update database-trigger dml
1个回答
3
投票

为什么还要用触发器呢?你可以 轻松 开创 计算列 含有这些信息,并且不需要人工干预就能保持 "最新"。

ALTER TABLE dbo.Employee
ADD IsEmpty AS CASE WHEN DATALENGTH(SLFile) = 0 THEN 1 WHEN SLFile IS NULL THEN 1 ELSE 0 END PERSISTED

所以如果 SLFile 是NULL或有一个 DATALENGTH 0的 - 那么 IsEmpty 将会显示一个值为 1 (true) - 否则 0 (false)。

没有凌乱的触发器,不需要不断地更新--SQL Server将在幕后为你自动处理这一切。

© www.soinside.com 2019 - 2024. All rights reserved.