0

我试图更新表“contract_scan_image”中的字段“contract_id”。但是,更新失败并出现错误“746:无法更新字段 contract_id 和类型的 contract_scan_image!” 显示。

我的 SQL 命令是:

update contract_scan_image
   set contract_id = '14864730'
 where contract_id = '1486473'
   and type = 'RM'
   and account = '00193400944'

有谁知道发生了什么以及如何解决它?

4

3 回答 3

2

错误消息 -746 用于用户定义的错误。它通常用于 RAISE EXCEPTION 语句中的存储过程:

RAISE EXCEPTION -746, 0, "Field contract_id and type of contract_scan_image cannot be updated!"

消息文件中错误 -746 的实际消息文本是:

%s

也就是说,它将给出的字符串打印为字符串。

因此,您将需要跟踪contract_scan_image表上这些触发器调用的触发器和存储过程,并从错误的产生位置推断出您做错了什么。但是,从表面上看,您似乎不允许更改合同 ID,但这正是您正在尝试做的事情。

于 2013-08-21T03:17:59.043 回答
0

该错误是由触发的某些内容引起的。那么 UPDATE 命令不能修改任何表。

最后我删除了我要更新的记录。然后添加回修改后的记录。

我从网上复制错误描述以供参考。

顺便说一句,我问了我的主管,他说他确实触发了一些事情导致了这种情况。(他没有告诉我如何取消触发它......)


-746 函数、触发器或存储过程名称中的 SQL 语句违反了嵌套 SQL 限制

说明 如果正在修改表(通过 INSERT、DELETE、UPDATE 或 MERGE),则较低级别的嵌套 SQL 语句无法访问该表。

如果 SELECT 语句正在访问任何表,则不能在任何较低级别的嵌套 SQL 语句中修改表(通过 INSERT、DELETE、UPDATE 或 MERGE)。

系统操作 SELECT、INSERT、DELETE、UPDATE 或 MERGE SQL 语句失败。

程序员响应 从命名函数、触发器或存储过程中删除失败的语句。

SQLSTATE

57053

于 2013-08-21T04:55:34.947 回答
0

首先,我会看一下 SQL 中的保留字列表 - https://drupal.org/node/141051

我会养成使用 `` 围观田野的习惯,见下文:

update contract_scan_image
set `contract_id` = '14864730'
where `contract_id` = '1486473'
and `type` = 'RM'
and `account` = '00193400944'

** 注意 - type 是保留字

于 2013-08-21T03:22:05.410 回答