我在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时)
创建触发器的任何想法?
答案 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)
现在,如果您选择行,您应该看到插入的第一行,您会得到两个NULL
(febrero
和abril
),其中提供了0.0