我已经做了很多搜索和测试,但我似乎找不到这样的例子,或者让我的任何测试都能正常工作。
我有许多字段的表,它们从NULL开始(意味着数据未知),当它们获取数据时,数据永远不是空字符串。一些反复更新数据以反映快照的更新脚本非常复杂,有时会使用NULL或空值覆盖值。这些脚本超出了我们现在真正修复的能力,所以我想采取另一种方法,并防止在存在数据时使用NULL或空白的字段更新。
答案 0 :(得分:1)
我在使用MySQL之前已经完成了这类工作,但从未使用过SQL Server,所以我的语法可能略有偏差。基本要点是在表上设置触发器,并在更新发生后对所有已删除的行运行UPDATE-JOIN(更新涉及DELETE和INSERT)。 deleted
表是与触发器相关的特殊对象,我们可以使用它来获取旧值。如果nullColumn
中的旧值为NULL
,则触发器会将新值设置为NULL
,同时丢弃可能已进行的任何更改。
CREATE TRIGGER nullKeep
ON nullTable
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE a
SET
nullColumn1 = CASE WHEN b.nullColumn1 IS NULL THEN NULL ELSE a.nullColumn1 END
, nullColumn2 = CASE WHEN b.nullColumn2 IS NULL THEN NULL ELSE a.nullColumn2 END
, nullColumn3 = CASE WHEN b.nullColumn3 IS NULL THEN NULL ELSE a.nullColumn3 END
/* ...repeat for as many columns as you need... */
FROM
nullTable a
INNER JOIN
deleted b
ON a.ID = b.ID
END
GO