【发布时间】:2010-09-16 15:48:16
【问题描述】:
我有 MS SQL Server 数据库并向其中一个表插入一些值。
假设该表包含列ID、int Status 和text Text。
如果可能,我想创建一个触发器,以防止将特定的不正确状态(例如1)写入表。相反,应该写0。但是,插入新值时应保留其他列:
如果写入的新行是(1, 4, "some text"),则按原样写入。
如果写入的新行是(1, 1, "another text"),则写为(1, 0, "another text")
是否可以创建这样的触发器?怎么样?
编辑:即使状态列无效,我也需要允许写入此类记录,因此外键对我不起作用。
【问题讨论】:
-
绝对是。插入触发器可以做到这一点。但是,出于各种原因,主要与调试和可维护性有关,我建议您在代码中处理它,而不是为这种逻辑使用触发器。此外,如果状态是用户输入,如果输入的状态不正确,您是否需要提醒/警告用户,而不是仅仅更改用户不知道的状态?
-
我正在使用 ORM 写入数据库,并且在某些情况下,它会插入具有中间状态的中间值。这还不错,但是,如果程序由于某些原因崩溃,数据库中会存储无效状态。所以我无法在代码中处理这个(这是第三方二进制文件),这不是用户输入。
-
尽可能使用事务来确保 ACID...
-
谢谢,但这是第三方 ORM,我不能。我需要这个 hack 来解决第三方问题。
标签: sql sql-server