【问题标题】:Set value of the column to default for NULL values将列的值设置为 NULL 值的默认值
【发布时间】:2015-06-26 18:14:47
【问题描述】:

我有一个表,其列的默认值为 0。但是,当将 null 插入此表时,我希望将其设置为默认值。

由于插入查询是通用的并且也被其他数据库使用,我无法对插入语句进行任何更改。

我可以在创建表上设置约束或 case 语句,以便在传递 null 时插入默认值 0。

【问题讨论】:

  • 提供你的表结构
  • 跳跳虎可以帮到你
  • 您在 StackExchange 中提出了同样的问题,并在此处获得了触发答案:dba.stackexchange.com/questions/105207/…。这不能使用默认约束来完成。

标签: sql sql-server tsql


【解决方案1】:

如果您无法更改insert statement,那么您别无他法,只能创建instead of insert trigger

CREATE TRIGGER trTableName 
ON SchemaName.TableName
INSTEAD OF INSERT
AS
BEGIN

    INSERT INTO TableName (ColumnA, ColumnB, ...)
    SELECT ISNULL(ColumnA, 0), ISNULL(ColumnB, 0), ...
    FROM INSERTED

END

【讨论】:

  • @azim - 提示:有关 COALESCEISNULL 的详细信息请参阅 MSDN 博客 here。我倾向于使用COALESCE,因为它符合ANSI SQL 标准并且支持两个以上的参数。
【解决方案2】:

您可以在插入时使用触发器进行更新。

CREATE TRIGGER [dbo].[YourTriggerName]
   ON  [dbo].[YourTable]
   AFTER  INSERT 
AS 
BEGIN
      UPDATE t SET YourCol = 0
      FROM YourTable t
           JOIN Inserted i ON t.Id = i.Id
      WHERE i.YourCol IS NULL 
END

【讨论】:

    【解决方案3】:

    插入null与插入特定值相同,因此会绕过默认值。
    要使用默认设置,插入语句不应向该列插入任何内容。

    如果您不能在 into 语句的 select 位中使用 Coalesce (value, 0),请尝试在您的 select 查询中使用它来伪装结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-15
      • 2016-12-28
      • 2019-08-17
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      相关资源
      最近更新 更多