我有一栏 STag
,数据类型为 bit
另一栏 SFile
数据类型为 VARBINARY(MAX)
.
当Web应用程序调用更新此表时,我的触发器将更新 STag = 1
当 SFile
有数据,反过来,更新 STag = 0
当 SFile
被清空。
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
?
为什么还要用触发器呢?你可以 轻松 开创 计算列 含有这些信息,并且不需要人工干预就能保持 "最新"。
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将在幕后为你自动处理这一切。