【问题标题】:SQL finding and replacing the null with a triggerSQL查找并用触发器替换null
【发布时间】:2014-05-04 03:06:03
【问题描述】:

我一直在尝试创建一个触发器,该触发器将在 DateAdded 列中找到空值并将它们替换为当前日期或 GETDATE(),而且我似乎正在写很多行很简单,更新后是正确的方法吗?

USE MyGuitarShop;
    GO

IF OBJECT_ID('Products_INSERT') IS NOT NULL
DROP TRIGGER Products_INSERT;

GO

CREATE TRIGGER Products_INSERT
    ON Products
    AFTER INSERT, UPDATE 
AS

  IF EXISTS (SELECT DateAdded FROM Inserted WHERE DateAdded = Null)
        UPDATE Products SET DateAdded = getDate() WHERE dateAdded IS NULL
GO................... 

插入产品(添加日期、产品代码、产品名称、描述、列表价格) VALUES (NULL, 'halter', 'Hofner Icon', '', 699.99);............这可行,但每当我尝试更新语句并返回编辑屏幕时,一切添加但我添加的新行在添加日期下为空,如何让它自动更新到插入后的日期?据我所知,这应该有效(我确实将开头更改为插入后,更新

【问题讨论】:

    标签: tsql


    【解决方案1】:

    或者,您可以将 DateAdded 列设为 NOT NULL 并添加 GETDATE() 的默认约束。这样,每当创建一行并且 DateAdded 没有被赋予值时,它将被设置为当前日期:

    ALTER TABLE dbo.Products
      ALTER COLUMN DateAdded datetime NOT NULL;
    
    ALTER TABLE dbo.Products ADD  DEFAULT (GETDATE()) FOR DateAdded;
    

    【讨论】:

      【解决方案2】:

      这应该作为您的UPDATE 声明

      UPDATE Products SET DateAdded = getDate() WHERE dateAdded IS NULL 
      

      【讨论】:

      • 这有效,但每当我尝试更新语句并返回编辑屏幕时,所有内容都已添加,但我添加的新行在添加日期下为空,我如何让它自动更新到插入后的日期?据我所知,这应该有效(我确实将开头更改为插入后,更新
      • 我建议使用其他答案并更新默认值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多