[英]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腳本?
謝謝您的幫助。
是的 - 這些被稱為觸發器 。
您可以編寫在INSERT
, UPDATE
或DELETE
之后觸發的觸發器 - 或者它們也可以是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.