2015-12-23 71 views
2

我想编写一个触发器,该触发器应该查找插入或更新的值是否为正值,并将其替换为负值。 我试过这段代码:如何在更新或插入后将插入的正值转换为负值?

create trigger trigger_after_updaten on Inbox 
AFTER Update 
AS 
begin 
DECLARE @t INT 
If ((SELECT @t=ID_In FROM updated)>0) 
UPDATE Inbox SET [email protected]*-1 
END 

,但它表明这个错误:

Msg 102, Level 15, State 1, Procedure trigger_after_updaten, Line 223 
Incorrect syntax near '='. 

如何做到这一点的正确方法?

+1

不正确的触发定义。始终考虑插入的表格有多行。并且SQL Server没有更新的表,只是“插入”和“删除”。 –

+1

另一种解决方案是将CHECK CONSTRAINT添加到列中,限制接受的值(https://msdn.microsoft.com/zh-CN/library/ms176104.aspx)。 –

+0

我想要第二个目的地的建议 - 让DB拒绝不正确的数据比静静地“修复”它要好得多。无声修复可能会被遗忘,然后会产生非常混乱的调试体验。 –

回答

0

这应该为你的工作触发:

CREATE TRIGGER trigger_after_updaten on Inbox 
AFTER UPDATE 
AS 
BEGIN 
    UPDATE Inbox SET t = CASE WHEN(inserted.t < 0) THEN inserted.t ELSE -inserted.t END 
    FROM inserted 
    INNER JOIN Inbox 
     ON inserted.KEY_FIELD = Inbox.KEY_FIELD 
END 
+1

在你的代码中,不需要'@ t'这里 – Arulkumar

+0

但是这段代码并不检查更新后的值是否为正值,我只想转换正值。 – user5711356

+0

谢谢。去掉它。 –