gpt4 book ai didi

防止位列从 1 更新为 0 的 SQL 触发器?

转载 作者:行者123 更新时间:2023-12-04 22:24:05 24 4
gpt4 key购买 nike

在 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/

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