【问题标题】: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 - 提示:有关 COALESCE 和 ISNULL 的详细信息请参阅 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
      相关资源
      最近更新 更多