这个存储过程为什么 回报错 “键列信息不足或不正确。更新影响到多行。请重新操作”

cehcueu 2008-10-11 09:58:31

CREATE PROCEDURE check_in_confirm_return
@ctn_no character(12),
@in_date datetime,
@id_no character(10)
AS
update load_ctn_details

set load_ctn_details.goods_reach='1'

from load_ctn_details,load_ctn_head,load_ctn_ctns

where load_ctn_head.detail_no = load_ctn_details.detail_no and

load_ctn_ctns.ctn_key_id=load_ctn_details.ctn_key_id and

load_ctn_ctns.ctn_no = @ctn_no and load_ctn_head.dept_id='C' and

(load_ctn_details.goods_reach='0')

GO

表结构如下
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[load_ctn_details]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[load_ctn_details]
GO

CREATE TABLE [dbo].[load_ctn_details] (
[load_key_id] [numeric](18, 0) IDENTITY (1, 1) NOT NULL ,
[detail_no] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bl_key_id] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[ctn_bl_weight] [decimal](18, 3) NULL ,
[ctn_bl_package] [int] NULL ,
[ctn_real_package] [int] NULL ,
[ctn_bl_size] [decimal](18, 3) NULL ,
[input_seq] [int] NOT NULL ,
[ctn_key_id] [varchar] (12) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[po_no] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[item_no] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[cargo_no] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[guobie] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[batch_seq_no] [varchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
[goods_reach] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[import_id] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[plan_match_id] [char] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[goods_match] [char] (1) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[load_ctn_details] WITH NOCHECK ADD
CONSTRAINT [PK_load_ctn_details] PRIMARY KEY CLUSTERED
(
[load_key_id]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[load_ctn_details] ADD
CONSTRAINT [f_bl_id] FOREIGN KEY
(
[bl_key_id]
) REFERENCES [dbo].[load_ctn_bls] (
[bl_key_id]
)
GO




...全文
558 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianhuo_soft 2008-10-12
  • 打赏
  • 举报
回复
UP
cehcueu 2008-10-12
  • 打赏
  • 举报
回复
UP
lazyhare 2008-10-11
  • 打赏
  • 举报
回复
插入记录中有完全重复的行导致的,可以考虑建立唯一约束或唯一索引,
gamecc 2008-10-11
  • 打赏
  • 举报
回复
修改表结构,手动或者用语句添加一个自增的标识列,就OK了
水族杰纶 2008-10-11
  • 打赏
  • 举报
回复
表没有主键或identity列,而你在delete或update操作的时候,有另外的行跟你当前编辑的行一模一样,所以才会出现这样的问题。推荐给表加上identity列,另外要编辑的话,用语句编辑。
csdyyr 2008-10-11
  • 打赏
  • 举报
回复
试手工删除一条记录有没有问题
rucypli 2008-10-11
  • 打赏
  • 举报
回复
有另外的行跟你当前编辑的行一模一样
fcuandy 2008-10-11
  • 打赏
  • 举报
回复
表中无主健,或无可唯一区别记录的列(或列组合),以致无法区别记录


sqlserver无法唯一定位到行来执行update或delete操作.

可以测试:
create table ta(v varchar)
insert ta select 1 union all select 1

go

打开企业管理器,展开表,打开ta表
选中任一行记录,点删除,即报此错误。


解决:
加一列或列主合为主健,或加一不重复的列,比如标识列,guid等等。或对某个列加唯一约束(当行重复时,无法加唯一约束)。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧