【问题标题】:Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=子查询返回超过 1 个值。当子查询跟随 =, != 时,这是不允许的
【发布时间】:2012-06-04 08:53:28
【问题描述】:

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

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

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

prac1:Id,Name,Lname
prac2:名称,Lname

【问题讨论】:

  • 听起来你的触发器坏了。只处理单行更改的常见错误。发布您的触发代码。
  • 嗯?提供的查询在语法上无效。

标签: sql sql-server


【解决方案1】:

您确定您的查询有效吗?因为正如评论中已经说明的那样,语法无效。看看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

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

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 2019-10-13
    • 1970-01-01
    • 2022-11-02
    • 2017-03-10
    相关资源
    最近更新 更多