Office中国论坛/Access中国论坛

标题: SQL 存储过程--------IDENTITY_INSERT 未打开 [打印本页]

作者: 天涯沦落20131    时间: 2019-6-24 07:50
标题: SQL 存储过程--------IDENTITY_INSERT 未打开
存储过程:以生产ID为条件!设计3表关联数据更新到另一表数据!显示错误:“消息 8101,级别 16,状态 1,过程 sc_sjmxb,第 87 行
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'生产_数据分析表'中的标识列指定显式值。”
  代码:
GO
/****** Object:  StoredProcedure [dbo].[sc_sjmxb]    Script Date: 06/24/2019 07:41:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sc_sjmxb]
@生产ID  int  ,
@生产日期 date ,
@机台号  varchar(10) ,
@机台吨位 varchar(15) ,
@班别 varchar(4),
@客户 varchar(20),
@模号 varchar(20),
@周期 int,
@穴数 int,
@工单编号 varchar(30),
@产品料号 varchar(40),
@品名 varchar(40),
@生产数量 float,
@不良品        float,
@打样数量 float,
@生产状态 varchar(8),
@计划开机时数 float,
@开机时间 float,
@计划停机时间 float,
@非计划停机时间 float,
@试模时间 float,
@人员工时 float,
@开机员 varchar(10),
@试模员  varchar(10),
@模具分类  varchar(10),
@备注  varchar(100),
@rtn int output
as
declare
--@tmpsc_scID int  ,
@tmpsc_sczq date,
@tmpsc_jth  varchar(10),
@tmpsc_jtdw varchar(15),
@tmpsc_bb varchar(4),
@tmpsc_kf varchar(20),
@tmpsc_mh varchar(20),
@tmpsc_zq int,
@tmpsc_xs int,
@tmpsc_gdbh varchar(30),
@tmpsc_cplh varchar(40),
@tmpsc_pm varchar(40),
@tmpsc_scsl float,
@tmpsc_blp        float,
@tmpsc_dysl float,
@tmpsc_sczt varchar(8),
@tmpsc_jhkjss float,
@tmpsc_kjsj float,
@tmpsc_jhtjsj float,
@tmpsc_fjhtjsj float,
@tmpsc_smsj float,
@tmpsc_zygs float,
@tmpsc_kjy varchar(10),
@tmpsc_smy varchar(10),
@tmpsc_mjwl varchar(10),
@tmpsc_bz  varchar(80)
if exists(select * from 注塑机_标准费用 INNER JOIN (模号_统计表 INNER JOIN (产品_信息表 INNER JOIN 生产_数据统计表 ON 产品_信息表.产品ID = 生产_数据统计表.产品ID) ON 模号_统计表.模号ID = 生产_数据统计表.模号ID) ON 注塑机_标准费用.机台ID = 生产_数据统计表.机台ID where 生产ID =@生产ID)


BEGIN

select @tmpsc_sczq = 生产日期,@tmpsc_jth=机台号,@tmpsc_jtdw=机台吨位,@tmpsc_bb=班别,@tmpsc_kf=客户,@tmpsc_mh=模号 ,
@tmpsc_zq=周期,@tmpsc_xs=穴数,@tmpsc_gdbh=工单编号,@tmpsc_cplh=产品料号,@tmpsc_pm=品名 ,@tmpsc_scsl=生产数量,@tmpsc_blp=不良品,@tmpsc_dysl=打样数量,
@tmpsc_sczt=生产状态 ,@tmpsc_jhkjss=计划开机时数,@tmpsc_kjsj=开机时间,@tmpsc_jhtjsj=计划停机时间,@tmpsc_fjhtjsj=非计划停机时间,@tmpsc_smsj=试模时间,@tmpsc_zygs=人员工时,
@tmpsc_kjy=开机员,@tmpsc_smy=试模员,@tmpsc_mjwl=模具分类,@tmpsc_bz=备注 from 生产_数据分析表 where 生产ID =@生产ID

if ((@tmpsc_sczq = @生产日期)and(@tmpsc_jth=@机台号)and(@tmpsc_jtdw=@机台吨位)and(@tmpsc_bb=@班别)and(@tmpsc_kf=@客户)and (@tmpsc_mh=@模号 ) and
(@tmpsc_zq=@周期)and(@tmpsc_xs=@穴数)and(@tmpsc_gdbh=@工单编号)and(@tmpsc_cplh=@产品料号 )and(@tmpsc_pm=@品名)and(@tmpsc_scsl=@生产数量)and(@tmpsc_blp=@不良品) and(@tmpsc_dysl=@打样数量)
and(@tmpsc_sczt=@生产状态) and(@tmpsc_jhkjss=@计划开机时数)and(@tmpsc_kjsj=@开机时间)and (@tmpsc_jhtjsj=@计划停机时间)and(@tmpsc_fjhtjsj=@非计划停机时间)and(@tmpsc_smsj=@试模时间)and(@tmpsc_zygs=@人员工时)
and(@tmpsc_kjy=@开机员)and(@tmpsc_smy=@试模员)and(@tmpsc_mjwl=@模具分类)and(@tmpsc_bz=@备注))
begin
    set @rtn = 0
    end
  else
begin
    update 生产_数据分析表 set @tmpsc_sczq = 生产日期,@tmpsc_jth=机台号,@tmpsc_jtdw=机台吨位,@tmpsc_bb=班别,@tmpsc_kf=客户,@tmpsc_mh=模号 ,
@tmpsc_zq=周期,@tmpsc_xs=穴数,@tmpsc_gdbh=工单编号,@tmpsc_cplh=产品料号,@tmpsc_pm=品名 ,@tmpsc_scsl=生产数量,@tmpsc_blp=不良品,@tmpsc_dysl=打样数量,
@tmpsc_sczt=生产状态 ,@tmpsc_jhkjss=计划开机时数,@tmpsc_kjsj=开机时间,@tmpsc_jhtjsj=计划停机时间,@tmpsc_fjhtjsj=非计划停机时间,@tmpsc_smsj=试模时间,@tmpsc_zygs=人员工时,
@tmpsc_kjy=开机员,@tmpsc_smy=试模员,@tmpsc_mjwl=模具分类,@tmpsc_bz=备注 from 生产_数据分析表 where 生产ID =@生产ID
    set @rtn=2
    end
end
else

begin

insert into 生产_数据分析表 select * from 注塑机_标准费用 INNER JOIN (模号_统计表 INNER JOIN (产品_信息表 INNER JOIN 生产_数据统计表 ON 产品_信息表.产品ID = 生产_数据统计表.产品ID) ON 模号_统计表.模号ID = 生产_数据统计表.模号ID) ON 注塑机_标准费用.机台ID = 生产_数据统计表.机台ID where 生产ID =@生产ID


insert into 生产_数据分析表 values (@生产ID,@生产日期,@机台号,@机台吨位,@班别,@客户,@模号,
@周期,@穴数,@工单编号,@产品料号,@品名,@生产数量,@不良品,@打样数量,@生产状态,@计划开机时数,
@开机时间,@计划停机时间,@非计划停机时间,@试模时间,@人员工时,@开机员,@试模员,@模具分类,@备注)
set @rtn=1

end
新手,照本宣科,请高手看看问题出在那里!谢谢!


作者: snryga    时间: 2019-6-25 13:08
实例?
作者: roych    时间: 2019-7-8 15:56
存储过程不是这样写的。哪有传入这么多参数的啊?
一般传入一个时间参数(例如,日期,又或者起止时间),最多再加上两个步骤参数(即起止步骤。例如,一个业务逻辑有10步,有时候想单独看某一步或者某几步的结果,可以这样考虑)。
说完了常理,现在再回头看你这个存储过程。按我的理解,你可以试着创建一个表值函数,传入参数时读取表值函数,然后通过这个表值函数去update就好了。具体可以参考以下帖子:
http://www.office-cn.net/thread-125180-1-1.html




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3