说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

我的存储过程为什么不工作?急求解决!!在线等待!!!

编辑:说三道四文库 发布时间:2018-05-24 08:24
HTML文档下载 WORD文档下载 PDF文档下载
请问我的这个存储过程那里错了,为什么现在只能修改,不能添加??
我的表: products有如下的字段。
+-----------------------------------------------------------------------+
|pro_id|pro_brand|pro_sn|pro_ln|pro_name|pro_bz|is_out|pro_sp|pro_typeid|
+-----------------------------------------------------------------------  
我的存储过程的目的是插入数据,如果在相同的pro_name中有相同的pro_sn 和pro_ln 的值,就修改is_out的字段的值。如果没有相同就加入新的数据。现在我的存储过程可以做的前面的修改数据,但是后面的发现没有相同而加入新数据就不行。我真的不知道是什么回事,请指点并更正。
======================
create  PROCEDURE [temp_procedure]
 (@pro_id_4  [int],
  @pro_brand_4  [nvarchar](50),
  @pro_typeid_4  [int],
  @pro_sn_4  [varchar](50),
  @pro_ln_4  [varchar](50),
  @pro_sp_4  [varchar](50),
  @pro_bz_4  [nvarchar](50),
 @pro_name_4  [varchar](50),
  @is_out_4  [varchar](50))

AS 
declare @my_id  int
set @my_id=(select pro_id from products where pro_name=@pro_name_4 and pro_ln=@pro_ln_4 and pro_sn=@pro_sn_4)

begin TRANSACTION

INSERT INTO [gsldatabase].[dbo].[products] 
  ( [pro_id],
  [pro_brand],
  [pro_typeid],
  [pro_sn],
  [pro_ln],
  [pro_sp],
 [pro_bz],
  [pro_name],
  [is_out]) 
 
VALUES 
 ( @pro_id_4,
  @pro_brand_4,
  @pro_typeid_4,
  @pro_sn_4,
  @pro_ln_4,
  @pro_sp_4,
  @pro_bz_4,
  @pro_name_4,
  @is_out_4)

if((select count(pro_name) from products where pro_ln=@pro_ln_4 and pro_sn=@pro_sn_4)!=0) 
begin
rollback transaction
select * from [gsldatabase].[dbo].[products]

update [gsldatabase].[dbo].[products]

set 
[is_out]=@is_out_4
where ([pro_id]=@my_id and
     [pro_brand]=@pro_brand_4 and [pro_sn]=@pro_sn_4 and [pro_ln]=@pro_ln_4 and
[pro_sp]=@pro_sp_4 and [pro_name]=@pro_name_4 )
end 
else
begin
commit transaction
select * from products
end
GO

INSERT INTO [gsldatabase].[dbo].[products] 
  ( [pro_id],
  [pro_brand],
  [pro_typeid],
  [pro_sn],
  [pro_ln],
  [pro_sp],
 [pro_bz],
  [pro_name],
  [is_out]) 
 
VALUES 
 ( @pro_id_4,
  @pro_brand_4,
  @pro_typeid_4,
  @pro_sn_4,
  @pro_ln_4,
  @pro_sp_4,
  @pro_bz_4,
  @pro_name_4,
  @is_out_4)


if((select count(pro_name) from products where pro_ln=@pro_ln_4 and pro_sn=@pro_sn_4)!=0) 
这句肯定为true




create  PROCEDURE [temp_procedure]
 (@pro_id_4  [int],
  @pro_brand_4  [nvarchar](50),
  @pro_typeid_4  [int],
  @pro_sn_4  [varchar](50),
  @pro_ln_4  [varchar](50),
  @pro_sp_4  [varchar](50),
  @pro_bz_4  [nvarchar](50),
 @pro_name_4  [varchar](50),
  @is_out_4  [varchar](50))

AS 
declare @my_id  int
set @my_id=(select pro_id from products where pro_name=@pro_name_4 and pro_ln=@pro_ln_4 and pro_sn=@pro_sn_4)

if((select count(pro_name) from products where pro_ln=@pro_ln_4 and pro_sn=@pro_sn_4)!=0) 
update [gsldatabase].[dbo].[products]
set 
[is_out]=@is_out_4
where ([pro_id]=@my_id and
     [pro_brand]=@pro_brand_4 and [pro_sn]=@pro_sn_4 and [pro_ln]=@pro_ln_4 and
[pro_sp]=@pro_sp_4 and [pro_name]=@pro_name_4 )
select * from [gsldatabase].[dbo].[products]

else
INSERT INTO [gsldatabase].[dbo].[products] 
  ( [pro_id],
  [pro_brand],
  [pro_typeid],
  [pro_sn],
  [pro_ln],
  [pro_sp],
 [pro_bz],
  [pro_name],
  [is_out]) 
 
VALUES 
 ( @pro_id_4,
  @pro_brand_4,
  @pro_typeid_4,
  @pro_sn_4,
  @pro_ln_4,
  @pro_sp_4,
  @pro_bz_4,
  @pro_name_4,
  @is_out_4)


select * from products
GO
还是大力,厉害!
多谢指点!!!
功能已经可以实现了!!!
多谢多谢!!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘