簡體   English   中英

在 table1 (SQL Server) 中插入任何行后,如何自動更新 table1 中的某些列 table2?

[英]How can I update some columns table2 from table1 automatically after insert any row in table1 (SQL Server)?

我有table1

id  name    ranking energy   
-------------------------------
222    tom      15      f            
333    sara     11      f    
333    sara     2       a      
111    jhon     4       h       
111    jhon     16      f    
333    sara     13      g    
222    tom      12      j    

table2

id  name    ranking
-------------------
111 jhon    2
222 tom     1
333 sara    0

我希望任何行插入到 table1 自動更新 table2 中的列ranking

我想我應該使用觸發器,但我不知道如何使用?

我使用以下代碼但不起作用:

CREATE TRIGGER Table1Trigger   
ON Table1 
AFTER INSERT
BEGIN
    UPDATE Table2 
    SET ranking = Table1.ranking 
    WHERE Table1.id = Table2.id;
END;

大概你真的想要這個:

CREATE TRIGGER dbo.Table1Trigger
ON dbo.Table1
AFTER INSERT
AS --AS was missing
BEGIN

    UPDATE T2
    SET ranking = i.ranking
    FROM dbo.Table2 T2 
         JOIN inserted i ON T2.id = i.id;

END;

您嘗試中的Table1沒有上下文; 定義為Table1的查詢中沒有 object。 但是,您也不太可能希望使用表Table1中的每一行,而是只使用插入的行(在偽表inserted中)。

我們可以使用 OUTPUT CLAUSE 代替觸發器

DECLARE @TmpTable TABLE (ID INT, ranking VARCHAR(100))

INSERT TestTable (ID, TEXTVal)
OUTPUT Inserted.ID ,Inserted.TEXTVal INTO @TmpTable
VALUES (2,'SecondVal')

UPDATE T2
  SET ranking = i.ranking
  FROM dbo.Table2 T2 
     JOIN @TmpTable i ON T2.id = i.id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM