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

Tagging should use before trigger or after trigger

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

当 Web 应用程序调用更新此 table 时,我的触发器应在 SFile 有数据时更新 STag = 1,相反,在 [=13= 时更新 STag = 0 ]被清空。

    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?

编写触发器

为什么还要用触发器呢??您可以轻松创建一个计算列,其中包含该信息并且无需手动干预即可保留"up to date":

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(真) - 否则 0(假)。

没有混乱的触发器,无需不断更新 - SQL 服务器会自动在幕后为您处理这一切