子查询返回的值超过1。子查询遵循=,!=时不允许这样做

时间:2012-05-30 06:17:05

标签: sql sql-server

我有2个名为Prac1prac2的表。Prac1有触发器。当prac1中发生插入时,相同的条目进入prac2(触发代码)我已经创建了一个sp,从prac1中选择前3个id并再次插入prac1并使用它的值(其他列)。但是只添加了一行而不是3.Query是:< / p>

Insert name,lname into prac1 where id in(select top3 id from prac1).

当我删除触发器时,我的sp被执行并且3个条目被添加到表中。如何处理这种情况?

  

prac1:ID,NAME,L-NAME
  prac2:姓名,Lname

1 个答案:

答案 0 :(得分:0)

您确定自己的查询有效吗?因为正如评论中已经说明的那样,语法无效。查看MSDN for more information正确的语法是:

INSERT [INTO] 
      table_name  [ ( column_list ) ] 
      { VALUES 
      ( { DEFAULT | NULL | expression } [ ,...n] ) 
| derived_table
       }

所以你的插入查询应该是这样的:

INSERT INTO prac1(name, lname) 
SELECT TOP 3 name, lname
  FROM prac1

发布您的触发器代码,您看到的插入的行应该是第一个触发触发器的行。然而,插入物可能再次触发它。所以也许你需要禁用它并重新启用它。