ALTER PROCEDURE [dbo].[AddEquipmentApplyDetails]
 (         @EADEaID int = null, 
           @EADVbiCode varchar(50) = null, 
           @EADEbiCode  varchar(50) = null, 
           @EADSpecification int = null, 
           @EADUnit int = null, 
           @DADNum int = null, 
           @DADDesc varchar(200) = null, 
           @EADFillTime datetime = null, 
           @EADFillPerson varchar(20) = null, 
           @EADUpdateTime datetime = null, 
           @EADUpdatePerson varchar(20) = null,
           @EBIName varchar(50) = null
           )
AS
BEGINset xact_abort on
BEGIN TRAN
 
DECLARE @EBICode varchar(50)
SET @EBICode =(SELECT EBICode FROM EquipmentBaseInfo WHERE EquipmentBaseInfo.EBIName= @EBIName)
 
INSERT INTO [VHC_WareHouse].[dbo].[EquipmentApplyDetails]
     VALUES
     (
           @EADEaID ,
           @EADVbiCode, 
           @EBICode,
           @EADSpecification, 
           @EADUnit, 
           @DADNum, 
           @DADDesc, 
           @EADFillTime, 
           @EADFillPerson, 
           @EADUpdateTime, 
           @EADUpdatePerson)
          
commit tran
END大概意思就是从EquipmentBaseInfo查出EBICode赋值给EquipmentApplyDetails的EADEbiCode,但插入的时候,我用的是变量@EBICode ,谢谢大家啦

解决方案 »

  1.   


    --当取的不是一条记录是会有问题
    SET @EBICode =(SELECT top 1 EBICode FROM EquipmentBaseInfo WHERE EquipmentBaseInfo.EBIName= @EBIName)
    --还有[EquipmentApplyDetails]列建议写全,因为如果后面的值传的和列不等(假设无自增列),则有错
    --以后你如果改了表EquipmentApplyDetails,新增了一列,则你的此存储过程必须改,这种设计
    --是不合理的,因此建议把列写了
      

  2.   

    EquipmentApplyDetails 里面就只有12列,主键自增,剩下的11列我都查入数据了,就是EADEbiCode这个字段和EquipmentBaseInfo的EBICode字段的值是一样的,但前台输入的是EquipmentBaseInfo的EBIName,所以我才写了这个存储过程,用EquipmentBaseInfo的EBICode去给EquipmentApplyDetails 的EADEbiCode赋值
      

  3.   


    --那你必要另加个变量的,直接这样写可以
    --建议你还是把[VHC_WareHouse].[dbo].[EquipmentApplyDetails](列1,列2)这些加进来
    --等哪天你给表EquipmentApplyDetails加个列,你就知道加进来的好处了,等你数据库中有上千个像类似不加列的SP,如果改一个表,这些SP会改的很头大的,呵呵
    insert into [VHC_WareHouse].[dbo].[EquipmentApplyDetails]
    select top 1 @EADEaID ,
               @EADVbiCode, 
               EBICode,
               @EADSpecification, 
               @EADUnit, 
               @DADNum, 
               @DADDesc, 
               @EADFillTime, 
               @EADFillPerson, 
               @EADUpdateTime, 
               @EADUpdatePerson
        from EquipmentBaseInfo
    where EquipmentBaseInfo.EBIName= @EBIName;
      

  4.   

    你的意思是自增的主键也要插到存储过程里,还有解释一下这个过程呗,Select那里那么写有点不懂,嘿嘿
      

  5.   


    ALTER PROCEDURE [dbo].[AddEquipmentApplyDetails]
     (         @EADEaID int = null, 
               @EADVbiCode varchar(50) = null, 
               @EADEbiCode  varchar(50) = null, 
               @EADSpecification int = null, 
               @EADUnit int = null, 
               @DADNum int = null, 
               @DADDesc varchar(200) = null, 
               @EADFillTime datetime = null, 
               @EADFillPerson varchar(20) = null, 
               @EADUpdateTime datetime = null, 
               @EADUpdatePerson varchar(20) = null,
               @EBIName varchar(50) = null
               )
    AS
    BEGINset xact_abort on
    BEGIN TRAN
    INSERT INTO 
               [VHC_WareHouse].[dbo].[EquipmentApplyDetails]
    select           
               @EADEaID ,
               @EADVbiCode, 
               EBICode ,
               @EADSpecification, 
               @EADUnit, 
               @DADNum, 
               @DADDesc, 
               @EADFillTime, 
               @EADFillPerson, 
               @EADUpdateTime, 
               @EADUpdatePerson
    FROM 
               EquipmentBaseInfo WHERE EquipmentBaseInfo.EBIName= @EBIName
              
    commit tran
    END--最好给出测试数据
      

  6.   


    自增主键是不用插入的,我是说其他列,给你举个例子吧,别说我以后误导你了alter table EquipmentApplyDetails add appendCol varchar(20) null;
    --这时你再试你的存储过程,难道不会出错吗
    --可能你不太用到而已,如果一个系统1000多张表,几千个像你这样的存储过程,人家会改死的,呵呵