0
ALTER PROCEDURE [dbo].[K_HM_InsertSetterGetterAllocationDet]
@type varchar(50),
@name varchar(50),
@settingdate datetime,
@quantity int,
@Batchno varchar(50),
@pulloutdate datetime,

@supervisor varchar(50),
@updatedby varchar(50)

AS
BEGIN

SET NOCOUNT ON;

   if exists(select * from K_HM_SetterGetterAllocationDet where Name=@name and      [type]=@type and Attrited='false')
   begin
       select '1' as status
   end
   else 
      if exists (select * from K_HM_GetterSetterDet where Capacity >=@quantity)
      begin
         select '2' as status
      end
      else 
         insert into K_HM_SetterGetterAllocationDet (Type, Name, Settingdate, Quantity, batchno,pulloutdate,Supervisor,Attrited,Updatedby,Updatedon) 
         values (@type, @name,  @settingdate, @quantity, @Batchno, @pulloutdate, @supervisor, 'false',   @updatedby, getdate())   

   select '3' as status
END

上記の手順では、上記の 2 つのケースが false で、Quantity が Capacity より小さい場合、3 番目のケースは実行されません。数量が容量より少ないか多い場合は、常に 2 番目のケースにのみ入ります。私の手順で何が問題なのですか、助けてください....

4

2 に答える 2

0

Begin...End3番目のステートメントにaを追加しました。

IF EXISTS ( SELECT    *
              FROM      K_HM_SetterGetterAllocationDet
              WHERE     Name = @name
                        AND [type] = @type
                        AND Attrited = 'false' ) 
    BEGIN
        SELECT  '1' AS status
    END
  ELSE 
    IF EXISTS ( SELECT  * FROM    K_HM_GetterSetterDet WHERE   Capacity >= @quantity ) 
        BEGIN
            SELECT  '2' AS status
        END
    ELSE 
        BEGIN
            INSERT  INTO K_HM_SetterGetterAllocationDet
                    ( Type ,
                      Name ,
                      Settingdate ,
                      Quantity ,
                      batchno ,
                      pulloutdate ,
                      Supervisor ,
                      Attrited ,
                      Updatedby ,
                      Updatedon
                    )
            VALUES  ( @type ,
                      @name ,
                      @settingdate ,
                      @quantity ,
                      @Batchno ,
                      @pulloutdate ,
                      @supervisor ,
                      'false' ,
                      @updatedby ,
                      GETDATE()
                    )                         
            SELECT  '3' AS STATUS
        END 

編集:コメントに基づいて...

各クエリを取得します..

SELECT  *
FROM    K_HM_SetterGetterAllocationDet
WHERE   Name = 'hardcoded name'
        AND [type] = 'hardcoded type'
        AND Attrited = 'false' 

これに行がある場合status =1、それ以外の場合は以下を実行します...

SELECT  *
FROM    K_HM_GetterSetterDet
WHERE   Capacity >= hardcoded quantity

これに行がある場合はstatus = 2、そうでない場合status = 3

于 2013-11-04T09:55:05.077 に答える