当值为0时,更新触发器中行的列

时间:2013-12-27 16:18:19

标签: sql-server sql-server-2008 tsql triggers

我在SQL Server 2008中有一个表。在一个网页中插入这些列为0

列:

id (identity)
enero (decimal)  --inserts 0 convert to null
febrero (decimal)--inserts 0 convert to null
marzo (decimal)  --inserts 0 convert to null
abril (decimal)  --inserts 0 convert to null
etc..


CREATE TRIGGER Pone
   ON  Rf_Egr_Meses
   AFTER   INSERT, UPDATE 
AS 
BEGIN
    --  
    SET NOCOUNT ON;

    --i don't know hoy compare if are 0 and what row 
  update Rf_Egr_Meses set ene=null , feb=null, mar=null where ()




END
GO

由于某些原因,我无法更改插入0的网页。

在一个表中,我想创建一个触发器,将值从0转换为null(仅当值为0时)

创建触发器的任何想法?

1 个答案:

答案 0 :(得分:0)

尝试这样的事情 - 使用NULLIF函数,如果表达式为真,则返回NULL

CREATE TRIGGER trgInsertNullIfZero
ON dbo.Rf_Egr_Meses
FOR INSERT
AS 
    UPDATE dbo.Rf_Egr_Meses
    SET 
        enero = NULLIF(i.enero, 0.0),
        febrero = NULLIF(i.febrero, 0.0),
        marzo = NULLIF(i.marzo, 0.0),
        abril = NULLIF(i.abril, 0.0)
            -- and so on, probably for all twelve months
    FROM 
        INSERTED i
    WHERE   
        dbo.YourTableNameHere.ID = i.ID

这甚至可以处理多次插入多行的插入。

您可以通过发出以下命令来尝试:

INSERT INTO dbo.Rf_Egr_Meses(enero, febrero, marzo, abril)
VALUES  (42.0, 0.0, 55.0, 0.0), (0.0, 17.0, 44.0, 49.0)

现在,如果您选择行,您应该看到插入的第一行,您会得到两个NULLfebreroabril),其中提供了0.0