【问题标题】:Prevent writing a NULL or blank to field防止将 NULL 或空白写入字段
【发布时间】:2016-08-17 14:12:56
【问题描述】:

我已经进行了很多搜索和测试,但我似乎找不到这样的例子,或者让我的任何测试工作。

我有很多字段的表,它们以 NULL 开头(意味着数据未知),当他们获取数据时,数据永远不是空字符串。一些反复更新数据以反映快照的更新脚本非常复杂,有时会用 NULL 或空白值覆盖值。这些脚本超出了我们现在真正修复的能力,所以我想采取另一种方法,并防止在已经有数据时更新具有 NULL 或空白的字段。

【问题讨论】:

  • 设置一个触发器来检查值是否更新为空字符串或空字符串并停止它。

标签: sql sql-server triggers constraints


【解决方案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

【讨论】:

  • 表格的每一列怎么样? (可能有几十个)
  • 查看可用于多列的解决方案的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多