If else in stored procedure sql server

后端 未结 8 1649
孤街浪徒
孤街浪徒 2021-02-02 07:19

I have created a stored procedure as follow:

Create Procedure sp_ADD_USER_EXTRANET_CLIENT_INDEX_PHY
(
@ParLngId int output
)
as
Begin
    SET @ParLngId = (Select         


        
相关标签:
8条回答
  • 2021-02-02 07:22
    if not exists (select dist_id from tbl_stock where dist_id= @cust_id and item_id=@item_id)
        insert into tbl_stock(dist_id,item_id,qty)values(@cust_id, @item_id, @qty); 
    else
        update tbl_stock set qty=(qty + @qty) where dist_id= @cust_id and item_id= @item_id;
    
    0 讨论(0)
  • 2021-02-02 07:22

    You can try below Procedure Sql:

    Create Procedure sp_ADD_USER_EXTRANET_CLIENT_INDEX_PHY
    (
    @ParLngId int output
    )
    as
    Begin
        -- Min will return only 1 value, if 'Extranet Client' is found
        -- IsNull will take care of 'Extranet Client' not found, returning 0 instead of Null
        -- But T_Param must be a Master Table with ParStrNom having a Unique Index, if so Min is not reqd at all
        -- But 'PHY', 'Extranet Client' suggests that Unique Key has 2 columns, not just ParStrNom
    
        SET @ParLngId = IsNull((Select Min (ParLngId) from T_Param where ParStrNom = 'Extranet Client'), 0);
    
        -- Nothing changed below
    
        if  (@ParLngId = 0)
            Begin
                Insert Into T_Param values ('PHY', 'Extranet Client', Null, Null, 'T', 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL)
                SET @ParLngId = @@IDENTITY
        End
    
        Return  @ParLngId
        End
    
    0 讨论(0)
  • 2021-02-02 07:23

    Instead of writing:

    Select top 1 ParLngId from T_Param where ParStrNom = 'Extranet Client'
    

    Write:

    Select top 1 ParLngId from T_Param where ParStrNom IN 'Extranet Client'
    

    i.e. replace '=' sign by 'IN'

    0 讨论(0)
  • 2021-02-02 07:34

    Try this with join query statements

    CREATE PROCEDURE [dbo].[deleteItem]
    @ItemId int = 0 
    AS
     Begin
     DECLARE @cnt int;
    
    SET NOCOUNT ON
    SELECT @cnt =COUNT(ttm.Id) 
        from ItemTransaction itr INNER JOIN ItemUnitMeasurement ium 
            ON itr.Id = ium.ItemTransactionId  INNER JOIN ItemMaster im 
            ON itr.ItemId = im.Id INNER JOIN TransactionTypeMaster ttm 
            ON itr.TransactionTypeMasterId = ttm.Id 
            where im.Id = @ItemId
    
    if(@cnt = 1)
        Begin
        DECLARE @transactionType varchar(255);
        DECLARE @mesurementAmount float;
        DECLARE @itemTransactionId int;
        DECLARE @itemUnitMeasurementId int;
    
            SELECT @transactionType = ttm.TransactionType,  @mesurementAmount = ium.Amount, @itemTransactionId = itr.Id, @itemUnitMeasurementId = ium.Id
            from ItemTransaction itr INNER JOIN ItemUnitMeasurement ium 
                ON itr.Id = ium.ItemTransactionId INNER JOIN TransactionTypeMaster ttm 
                ON itr.TransactionTypeMasterId = ttm.Id 
                where itr.ItemId = @ItemId  
            if(@transactionType = 'Close' and @mesurementAmount = 0)
                Begin
                    delete from ItemUnitMeasurement where Id = @itemUnitMeasurementId;
    
                End
            else
                Begin
                    delete from ItemTransaction where Id = @itemTransactionId;
                End
        End
    else
     Begin
        delete from ItemMaster where Id = @ItemId;
     End
    END
    
    0 讨论(0)
  • 2021-02-02 07:40

    If there are no matching row/s then @ParLngId will be NULL not zero, so you need IF @ParLngId IS NULL.

    You should also use SCOPE_IDENTITY() rather than @@IDENTITY.

    0 讨论(0)
  • 2021-02-02 07:41

    You do not have to have the RETURN stament.

    Have anther look at Using a Stored Procedure with Output Parameters

    Also have another look at the OUT section in CREATE PROCEDURE

    0 讨论(0)
提交回复
热议问题