Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL触发器,用于在插入时向具有相同结构的表中添加新记录_Sql_Sql Server_Tsql_Triggers_Sql Server 2012 - Fatal编程技术网

SQL触发器,用于在插入时向具有相同结构的表中添加新记录

SQL触发器,用于在插入时向具有相同结构的表中添加新记录,sql,sql-server,tsql,triggers,sql-server-2012,Sql,Sql Server,Tsql,Triggers,Sql Server 2012,我正在尝试创建SQL触发器,它将新记录添加到通过网页进行插入的同一个表中。我不确定如何实现它,但我尝试了以下查询 CREATE trigger [dbo].[trgI_DealsDoneInserRecord] on [dbo].[Terms] after insert As Insert into DealsDone (Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],C

我正在尝试创建SQL触发器,它将新记录添加到通过网页进行插入的同一个表中。我不确定如何实现它,但我尝试了以下查询

CREATE trigger [dbo].[trgI_DealsDoneInserRecord]
on [dbo].[Terms]
after insert 
As    
  Insert into DealsDone                
        (Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],CounterParty,
               TermID,GradeID,CPID,Locked,Product)
  VALUES 
        (SELECT Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],CounterParty,
           TermID,GradeID,CPID,Locked,Product FROM inserted)

END
上述查询在
VALUES
中的
SELECT
语句中抛出了一个错误


我可以知道一种实现方法吗?

有一个语法问题,而且您缺少BEGIN

基本语法是

INSERT INTO table2  (column_name(s))
SELECT column_name(s)
FROM table1;
所以试试这个

    CREATE trigger [dbo].[trgI_DealsDoneInserRecord]
    on [dbo].[Terms]
    after insert 
    As
   BEGIN
       Insert into DealsDone                
          (Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],CounterParty,
                  TermID,GradeID,CPID,Locked,Product)
       SELECT Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],CounterParty,
                  TermID,GradeID,CPID,Locked,Product 
        FROM inserted
    END
请参阅:-

尝试以下操作:

CREATE trigger [dbo].[trgI_DealsDoneInserRecord]
ON [dbo].[Terms]
AFTER INSERT 
As    
BEGIN
  INSERT INTO DealsDone                
        (Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],CounterParty,
               TermID,GradeID,CPID,Locked,Product)
  SELECT Company,Grade,Term,Pipeline,[Index],Volume,Price,[Type],CounterParty,
           TermID,GradeID,CPID,Locked,Product FROM inserted
END

虽然我通常反对使用
SELECT*
,但在这种情况下,这似乎是一个好处:

  • 通过不指定字段,您可以在添加、删除甚至重命名字段时自动说明表中的更改,而无需更新此触发器

  • 如果其中一个表已更新,而另一个表未更新,并且结构不同,这将帮助您捕获架构更新中的错误。如果发生这种情况,插入操作将失败,您不必担心清理坏数据

所以用这个:

CREATE TRIGGER[dbo]。[trgI\u DealsDoneInserRecord]
关于[dbo]。[条款]
插入后
作为
不计数;
插入[交易通]
挑选*
从插入;

您的语法不正确。它应该看起来像
INSERT-INTO-Table(col1,col2,…,coln)从INSERT中选择col1,col2,…,coln
问题的标题是“INSERT-INTO-same Table”,但触发器定义显示了不同的表。是哪一个?还是说一张不同的桌子有相同的结构?如果是这样,它是否总是具有相同的结构?我想有人编辑了我的问题并删除了,我发现它是由您编辑的。请返回并检查,感谢您让我知道我的语法是错误的[但是它在“END”附近说的语法不正确。@Dev您刚刚忘记了一些方括号。现在应该可以了。哦,是的,我错过了顶部的BEGIN