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]
我正在使用 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]