2015-11-27 67 views
0

我不能得到這個權利...爲什麼這個SQL更新語句不起作用?

我需要設置gift_id值爲NULL,如果reservation_id IS NOT NULL同一行。

我想實現的事情是刪除某行的gift_id列,如果我更新該行的reservation_id列。

CREATE TRIGGER add_reservation 
AFTER UPDATE ON [dbo].[order] 
FOR EACH ROW 
BEGIN 
    IF [reservation_id] IS NOT NULL 
     THEN SET [gift_id] = NULL 
    END IF 
END 

錯誤:

Msg 102, Level 15, State 1, Procedure add_reservation, Line 2
Incorrect syntax near 'AFTER'.

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

+0

任何錯誤消息? – Jens

+0

Msg 102,Level 15,State 1,Procedure add_reservation,Line 2 'AFTER'附近語法不正確。 Msg 156,Level 15,State 1,Procedure add_reservation,Line 6 關鍵字'THEN'附近的語法錯誤。 – John

+0

我沒有看到你的語法有問題。你能澄清這個錯誤嗎? –

回答

0

我寫的情況下,你不得到原始代碼工作的替代,這個代碼需要在你的表中字段的OrderID,我認爲存在

CREATE TRIGGER [dbo].[order_update] 
ON [dbo].[order] 
FOR UPDATE 

AS 

UPDATE R SET R.[gift_id] = NULL 
    FROM [order] O 
     INNER JOIN inserted I ON I.OrderID = R.OrderID 
     WHERE I.[reservation_id] IS NOT NULL 
+0

Nop,我沒有字段OderID。 – John

+1

好吧,只需將它替換爲該表的主鍵,然後,聯接將僅選擇已更新的行 –

0

試試這個

CREATE TRIGGER [DBO].[TRG_ORDER_UPDATE] 
ON [TABLE_NAME] 
AFTER UPDATE 
AS 
    BEGIN 
     IF EXISTS(SELECT * 
       FROM INSERTED) 
     AND EXISTS(SELECT * 
        FROM DELETED) 
; WITH TEST AS (SELECT <YOUR,COLUMNS> FROM INSERTED) 
UPDATE TN SET TN.GIFT_ID = NULL 
FROM TABLE_NAME TN JOIN TEST T ON TN.(PRIMARY_COLUMN)=T.(PRIMARY_COLUMN) 
WHERE T.RESERVATION_ID IS NOT NULL 
END 
相關問題