簡體   English   中英

如何在每次創建行時運行SQL語句?

[英]How to run a SQL statement every time a row is created?

我們正在使用一個使用SQL Server的ERP系統。 有一個函數在特定表中創建一行'A',並用另一個表的另一行'B'中的數據填充它。 由於某些原因,程序員認為,“A”中只需要某些“B”值。 因此,只復制'B'中某些列的值。

現在我想要復制比程序副本更多的列。 列在那里,但它們不會被復制。

該程序提供了一種在執行創建行的SQL語句之前運行腳本的方法。 所以這里的問題是,我不知道將要創建的行的id。 即使我願意,也沒有創建行來改變它。

在特定表中創建行后,SQL Server中是否有一種方法可以運行SQL腳本?

謝謝您的幫助。

是的 - 這些被稱為觸發器

您可以編寫在INSERTUPDATEDELETE之后觸發的觸發器 - 或者它們也可以是INSTEAD OF觸發器 - 如果您需要完全控制操作。

在你的情況下,我相信AFTER INSERT觸發器應該沒問題:

CREATE TRIGGER TrgCopyAdditionalColumns
ON dbo.TableA
AFTER INSERT 
AS  
    -- the newly inserted row (there could be **multiple!**)
    -- will be stored in the `Inserted` pseudo table, which has the 
    -- exact same structure as your "TableB" table - just pick out
    -- the columns you need to insert into "TableA" from here
    INSERT INTO dbo.TableA (Col1, Col2, ..., ColN)
       SELECT 
           b.Col1, b.Col2, ..., b.ColN
       FROM 
           dbo.TableB AS b
       INNER JOIN
           -- somehow, you need to connect your Table B's rows to the
           -- newly inserted rows for Table A that are present in the 
           -- "Inserted" pseudo table, to get only those rows of data from
           -- Table B that are relevant to the newly inserted Table A rows
           Inserted i ON b.A_ID = i.ID  

暫無
暫無

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

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