SQL Server Management Studio - 更新后更新案例

SQL Server Management Studio - after update update case

我正在使用 SQL Server Management Studio 并尝试创建一个触发器,在更新 "order" table 后将 "gift_id" 列的值设置为 "NULL" 其中同一行 "reservation_id" 列的值将是“0<”或 NOT NULL。

更简短的解释 - 如果在 "reservation_id"=NOT NULL 行中,则设置 "gift_id"=NULL。

我想到了这个,但我无法正确触发。有人可以给我提示吗?

CREATE TRIGGER add_reservation
ON  [dbo].[order]
AFTER UPDATE
AS BEGIN
    UPDATE [dbo].[order]
      CASE
         WHEN [reservation_id] > 0
         THEN SET [gift_id] = NULL
      END
END
GO

似乎有语法错误:

Msg 156, Level 15, State 1, Procedure add_reservation, Line 6
Incorrect syntax near the keyword 'CASE'.

CREATE TRIGGER add_reservation
ON  [dbo].[order]
AFTER UPDATE
AS 
BEGIN
  SET NOCOUNT ON;

UPDATE O 
 SET O.[gift_id] = NULL 
FROM [dbo].[order] O  
INNER JOIN inserted i   ON o.Pk_Col = i.Pk_Col  --<-- Primary Key column
WHERE i.[reservation_id] > 0 
   OR i.[reservation_id] IS NOT NULL
END
GO

自己从中找到了另一个解决方案 “I want to use CASE statement to update some records in sql server 2005”post.

它做了我想要的,但是更新了每一行,所以它需要大量的资源和时间。也许它更简单,但不是最好的解决方案。

CREATE TRIGGER [dbo].[add_reservation]
ON  [dbo].[order]
AFTER UPDATE
AS BEGIN
UPDATE [dbo].[order]
SET [gift_id] =
( CASE 
WHEN ([reservation_id] IS NOT NULL) THEN NULL
ELSE [gift_id]
END )
END

对于在某个时候尝试做同样事情的人,我遇到了一些问题

AT LEAST ONE OF THE RESULT EXPRESSIONS IN A CASE SPECIFICATION MUST BE AN EXPRESSION OTHER THAN THE NULL CONSTANT

要解决这个问题,只需添加

 ELSE [gift_id]