Sql-Server

SQL 在更新查詢中按子查詢插入

  • November 11, 2021

我想編寫一個查詢來更新一個表中的列並在另一個表中插入行。

像這樣的東西

      update
           applications
      set
           applications.rejected = 1,
           (
               INSERT INTO rejection_reason (column1, column2)
                               VALUES (value1, value2)
           )
      where 
       applications.id  = 123

我知道我可以用 2 個查詢來完成,但我想一次性完成。有沒有辦法通過單個查詢更新和插入 2 個表?

這可以使用觸發器來實現。基於兩個表的架構上的有限資訊,您可能必須在rejection_reason 表上創建插入觸發器,這將更新表應用程序。假設拒絕表有一個 application_id 列,可以用作兩個表之間的連結。

例如

CREATE TRIGGER i_rejection_reason ON rejection_reason 
AFTER INSERT AS
BEGIN  
   UPDATE
       applications
   SET
           applications.rejected = 1,
  WHERE applications.id  = inserted.application_id  

END

下面的插入將通過觸發器更新應用程序表。

INSERT INTO rejection_reason (column1, column2, application_id)
VALUES (value1, value2, 123)

PS:考慮多行插入的影響(參考:https ://docs.microsoft.com/en-us/sql/relational-databases/triggers/create-dml-triggers?view=sql-server-ver15#TsqlProcedure )和測試性能以及在生產環境中使用它之前。

引用自:https://dba.stackexchange.com/questions/302467