2015-10-28 35 views
0

我需要创建一个触发器,它做这个动作:创建一个列之后SQL Server中的触发更新,指定值

如果列“idStatoTicket”是更新到值“3”我要将另一列(“dataChiusura”)设置为当前时间戳。

我tryed这

CREATE TRIGGER Customer_UPDATE 
     ON TICKET 
FOR UPDATE 
AS 
BEGIN 

     DECLARE @dataChiusura datetime 

     IF UPDATE(idStatoTicket = 3) 
     BEGIN 
       SET @dataChiusura = CURRENT_TIMESTAMP 
     END 

     INSERT INTO TICKET(dataChiusura) 
     VALUES(@dataChiusura) 
END 

一些帮助?

回答

0

您需要将INSERTED加入原始表格才能将值更改为您希望的值。

这是给你一个工作示例:

Drop Table MyTable 
GO 
Create Table MyTable 
(
Id Int Identity (1, 1), 
Value VarChar (100), 
idStatoTicket Int, 
DataChiusura DateTime 
) 
GO 
Insert Into MyTable Values ('Test 1', 1, GetDate()) 
Insert Into MyTable Values ('Test 2', 3, GetDate()-1) 
Select * From MyTable 
GO 
Create Trigger MyTable_Update ON MyTable FOR Update 
as 
Begin 
    Update T 
    Set DataChiusura = GetDate() 
    From MyTable T 
    Inner Join Inserted i 
     On T.Id = i.id 
     And i.idStatoTicket = 3 
End 
GO 
Update MyTable Set Value = 'Test 22' Where Value = 'Test 2' 
Select * From MyTable 
1

您应该使用INSERTED数据集来检查值。请尝试类似的东西:

if exists (
    select * from INSERTED where idStatoTicket = 3 
) 
begin 
    SET @dataChiusura = CURRENT_TIMESTAMP 
end 
0

我不是专家,但你似乎不相关的行单独插入被更新的,你可能有一个空行结束了刚刚dataChiusura集..

相关问题