2013-04-10 162 views
0

我是Sql Server的新手,但我一直使用Oracle很多。我發現Sql Server中沒有支持某些功能。比方說,我想看一個表插入,並插入到該表中,我想要複製到另一個表中相同的插入行。sql server觸發器插入

這裏是我的代碼

Create TRIGGER Post_Trigger ON Posts For Insert 
AS 
INSERT INTO EmailQueueRaw (UserID,CreatedBy,EmailTypeId,EmailTablePrimaryKey) VALUES('','Arif','1','1'); 
GO 

在Oracle中,我用新的和舊的函數,它是偉大的。但是我們沒有在Sql Server中使用它,我不確定這裏要做什麼。請幫助我如何將相同的數據複製到另一個表中?

回答

4

你會使用INSERTED(如果需要DELETED),但你需要知道,他們是pseudo-tables,並可能包含0,1,或多行:

Create TRIGGER Post_Trigger ON Posts For Insert 
AS 
INSERT INTO EmailQueueRaw (UserID,CreatedBy,EmailTypeId,EmailTablePrimaryKey) 
SELECT '',ColumnA,'1',ColumnB FROM inserted; 
GO 
+0

如何能有多行?如果案例是更新或刪除語句,則可能有多行,但不能插入。因爲插入時一次只插入一行,但更新和刪除可能會影響多行。 – 2013-04-10 08:26:32

+0

@Borsel - 在*一般* INSERT'可以影響多行。所有版本的SQL Server語法都允許'INSERT ... SELECT'(事實上,我在答案中已經在觸發器中顯示了一個)。 ANSI標準語法允許'VALUES'子句中的多個元組,例如INSERT INTO表(A,B)VALUES(1,2),(3,4)',自2008版(IIRC)開始支持。我相信Oracle一直支持ANSI標準語法。 – 2013-04-10 08:32:09

+0

@Borsel(實際上,在進一步的思考中,我相信'INSERT ... SELECT'也是標準允許的,它不是一個SQL Server唯一的構造) – 2013-04-10 08:46:15