在 SQL Server 2008 中给定一个位类型的列,我如何编写触发器以允许从 0 更新到 1,但不允许从 1 更新到 0?
换句话说,一旦该位设置为 1,它就应该一直为 1。
触发器必须适用于多个更新,例如:
UPDATE Table SET BitField = 0
对于 BitField = 1 的任何行都应该失败。
编辑:为了提供一些背景,问题中的位/标志标记是否需要处理货币交易。如果该位=1,则交易已经被处理。如果该位被重置为0,则交易可能会重复,所以我需要在数据库级别强制执行该位不能被重置为0。
我需要防止针对数据库运行的直接查询以及应用程序级别的错误。我不能确定存储过程是否会始终用于更新表,因此我相信触发器是执行此逻辑的唯一方法。
最佳答案
看起来你需要一个简单的后触发器
CREATE TABLE YourTable(
PK int Primary key,
bitCol bit
)
CREATE TRIGGER YourTableTrigger
ON YourTable
AFTER UPDATE
AS
DECLARE @nrOfViolations int
select @nrOfViolations = count(*) from deleted d
join YourTable t on d.PK = t.PK
where d.bitCol = 1 and t.bitCol = 0
if @nrOfViolations > 0
BEGIN
RAISERROR('Failed', 16, 1);
ROLLBACK TRANSACTION
END
关于防止位列从 1 更新为 0 的 SQL 触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642083/