2013-04-10 161 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