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]
GOCREATE 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]
GOALTER TABLE [dbo].[load_ctn_details] WITH NOCHECK ADD 
CONSTRAINT [PK_load_ctn_details] PRIMARY KEY  CLUSTERED 
(
[load_key_id]
)  ON [PRIMARY] 
GOALTER TABLE [dbo].[load_ctn_details] ADD 
CONSTRAINT [f_bl_id] FOREIGN KEY 
(
[bl_key_id]
) REFERENCES [dbo].[load_ctn_bls] (
[bl_key_id]
)
GO

解决方案 »

  1.   

    表中无主健,或无可唯一区别记录的列(或列组合),以致无法区别记录
    sqlserver无法唯一定位到行来执行update或delete操作.可以测试:
    create table ta(v varchar)
    insert ta select 1 union all select 1go打开企业管理器,展开表,打开ta表
    选中任一行记录,点删除,即报此错误。
    解决:
    加一列或列主合为主健,或加一不重复的列,比如标识列,guid等等。或对某个列加唯一约束(当行重复时,无法加唯一约束)。
      

  2.   

    表没有主键或identity列,而你在delete或update操作的时候,有另外的行跟你当前编辑的行一模一样,所以才会出现这样的问题。推荐给表加上identity列,另外要编辑的话,用语句编辑。