Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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_Sql Update - Fatal编程技术网

Sql 从表中更新顶级注册表

Sql 从表中更新顶级注册表,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我试图用两个主键和多行更新一个表 我从Sql Server收到以下消息: Msg 512,Nível 16,Estado 1,Procedimento TR_GaProTab,Linha 21[Linha de Início do Lote 2] 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时 只需将CTE直接更新为 WITH Query AS ( SELECT TOP 100 * FROM GaProTab WHERE EmpCod = '11111111000

我试图用两个主键和多行更新一个表

我从Sql Server收到以下消息:

Msg 512,Nível 16,Estado 1,Procedimento TR_GaProTab,Linha 21[Linha de Início do Lote 2] 子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时


只需将CTE直接更新为

WITH Query AS
(
  SELECT TOP 100 *
  FROM GaProTab
  WHERE EmpCod = '11111111000111'
        AND
        ProAtv = 1
  ORDER BY [WhatEver]
)
UPDATE Query
SET ProAtv = 2;

这里有一个简单的例子。

我终于找到了发生的事情。。。 我在这个表上启用了两个触发器,在禁用之后,命令成功运行

谢谢大家。我会把命令放在下面:

select EmpCod, GaProTab.ProCod into #Tmp
from GaProTab , (select top 100 ProCod from GaProTab where EmpCod ='11111111000111')
AS top100
where GaProTab.ProCod = top100.ProCod
and EmpCod = '11111111000111' and ProAtv = 1

update GaProTab SET ProAtv = 2 
from GaProTab, #Tmp
AS top100
where GaProTab.ProCod = top100.ProCod
and GaProTab.EmpCod = '11111111000111' and ProAtv = 1

第一,在没有订购人的情况下,不要使用
TOP
。第二,错误信息非常清楚,您的查询返回的行不止一行,而且有很多关于这方面的帖子。这是因为您使用了
TOP100
我理解它,但我无法更新包含900多个结果的整个表。我有什么选择?请以格式化文本而不是图像的形式共享示例数据和预期结果。帮助我们帮助你,你的触发器需要一些认真的帮助。在触发器中看到临时表会让我做噩梦。另外,在你的触发器中有top,没有orderby。另外,您应该开始使用ANSI-92样式的联接,它们已经存在了25年多了。另一个危险信号是,如果您必须禁用触发器来更新数据,那么您的触发器中出现了严重错误。这是一个旧数据库,我正在使用它进行测试。我是开发/sql server领域的初学者。我会读你给我的链接。我非常感谢你的回答。非常感谢。
select EmpCod, GaProTab.ProCod into #Tmp
from GaProTab , (select top 100 ProCod from GaProTab where EmpCod ='11111111000111')
AS top100
where GaProTab.ProCod = top100.ProCod
and EmpCod = '11111111000111' and ProAtv = 1

update GaProTab SET ProAtv = 2 
from GaProTab, #Tmp
AS top100
where GaProTab.ProCod = top100.ProCod
and GaProTab.EmpCod = '11111111000111' and ProAtv = 1