Saturday 11 August 2012

How to set a Local Variable in a store procedure and hold that value in Aspx page

Store procedure Pass a Local Varible which name is @out
ALTER PROCEDURE Ufms.[KC_DeleteGroup]
(
@Group_ID int,
@out int output

)
AS
BEGIN
    if EXISTS (SELECT Parent_Group_ID from Ufms.FMS_Groups WHERE Parent_Group_ID=@Group_ID)
     Select @out= 1
    ELSE
        BEGIN
        UPDATE Ufms.FMS_Groups SET Is_Deleted=1 Where Group_ID=@Group_ID
        END
END
==================================================
in Page behind Code in aspx page
====================================================
  public string DeleteGroups(int GroupID)
        {
            string MSG;
            SqlCommand deleteCommand = new SqlCommand("Ufms.KC_DeleteGroup");
            deleteCommand.CommandType = CommandType.StoredProcedure;
            deleteCommand.Parameters.Add(GetParameter("@Group_ID", SqlDbType.Int,                     Convert.ToInt32(GroupID)));
            deleteCommand.Parameters.Add(GetParameter("@OUT",SqlDbType.Int,null));
            deleteCommand.Parameters["@OUT"].Direction=ParameterDirection.Output;         
            ExecuteStoredProcedure(deleteCommand);         
            MSG= deleteCommand.Parameters["@OUT"].Value.ToString();         
            return MSG;
     
        }

Storeprocedure with Table Example


Table Name Groups

Table Name Ledgers

Table Name Ledger Opening Balances

Table Name Vouchers

Table Name Voucher Details


Table Name Financial Years
 
===============Store Procedure Example with Recursive  Store Procedure=========
====================This Store Procedure only Retrive ID and Check this Id is used in ParentGroup Id Or Not==================================================
For example -: in Leder Table the cash Ledger Id is 1 i will check that Ledger Id will used in parent Ledger Id or Not OR Retrive In cash Ledger Has child ledger or Not==========
 ALTER PROCEDURE [Ufms].[KC_SelectLedgersCash]
AS
BEGIN
WITH Ledgers AS (SELECT        l.Ledger_ID, l.Ledger_Name, l.Parent_Ledger_ID, lo.Dr_Amount, lo.Cr_Amount,lo.Financial_Year
                               FROM Ufms.FMS_Ledgers AS l INNER JOIN
                               Ufms.FMS_LedgerOpeningBalances AS lo ON l.Ledger_ID = lo.Ledger_ID
                               WHERE (l.Ledger_ID = 1 )
                   UNION ALL
                   SELECT C.Ledger_ID,c.Ledger_Name,c.Parent_Ledger_ID,f.Dr_Amount,f.Cr_Amount,f.Financial_Year
                   FROM Ledgers AS f INNER JOIN
                   Ufms.FMS_Ledgers AS c ON f.Ledger_ID=c.Parent_Ledger_ID
                   WHERE c.is_Active=1 and c.is_Deleted=0)
      SELECT        Ledger_ID, Ledger_Name, Parent_Ledger_ID,Dr_Amount,Cr_Amount,Financial_Year
     FROM            Ledgers AS Ledgers_1
END  
=======================Recursive Function ==================================
ALTER  procedure [Ufms].[KC_SelectLedgersCashBank]       

as
begin

WITH Ledgers AS (SELECT        Ledger_ID, Ledger_Name, Parent_Ledger_ID
                                        FROM            Ufms.FMS_Ledgers
                                        WHERE        (Ledger_ID = 1 or Ledger_ID=2)
                                        UNION ALL
                                        SELECT        c.Ledger_ID, c.Ledger_Name, c.Parent_Ledger_ID
                                        FROM            Ledgers AS f INNER JOIN
                                                                 Ufms.FMS_Ledgers AS c ON f.ledger_id = c.Parent_Ledger_ID where c.is_active=1 and c.is_deleted=0)
    SELECT        Ledger_ID, Ledger_Name, Parent_Ledger_ID
     FROM            Ledgers AS Ledgers_1
 end
 ==================================================================
--Author Satyabrata--11.08.2012
ALTER PROCEDURE Ufms.Kc_SelectReportLedgerBooks
@Fyear varchar(9)='2012-2013'
AS
BEGIN
     SELECT
     --From Ledger Table
        l.Ledger_ID,l.Ledger_Name,
        --From Ledger Opening Balance Table
        lob.Dr_Amount as LedgerOBDrAmount,lob.Cr_Amount LedgerOBcrAmount,
        lob.Financial_Year,lob.Is_Closed,
        --From Voucher Table
        v.Voucher_ID,v.Voucher_Date,convert(varchar(20),v.Voucher_Date,111) AS From_date,
        v.Voucher_Type,v.Voucher_No,v.Approved,
        --Voucher Details Table
        vd.Dr_Amount,vd.Cr_Amount,
        --Group Table
        g.Group_ID,g.Group_Name
        FROM
        Ufms.FMS_Ledgers AS l
        LEFT OUTER JOIN Ufms.FMS_LedgerOpeningBalances AS lob ON l.Ledger_ID=lob.Ledger_ID
        LEFT OUTER JOIN Ufms.FMS_VoucherDetails AS  vd ON l.Ledger_ID=vd.Ledger_ID
        LEFT OUTER JOIN Ufms.FMS_Vouchers AS v ON v.Voucher_ID=vd.Voucher_ID
        LEFT OUTER JOIN Ufms.FMS_Groups AS g ON l.Group_ID=g.Group_ID
        WHERE lob.Financial_Year=@Fyear
END
===============================================================
============This Store Procedure is show only cash details or cash child details Means if Cash Ledger has Child Ledger so create a view  that example is given below=============
That view is passe in this Storeprocedure because that view gives how much child ledger in a Parent Ledger
----------------------------------------------------------------------------------------------
ALTER PROCEDURE [Ufms].[KC_SelectCashDetails]
AS
BEGIN
SELECT   CONVERT(varchar(20),V.Voucher_Date,103) AS VoucherDate,CONVERT(varchar(20),V.Voucher_Date,111) AS From_Date,
          V.Voucher_No,V.Voucher_Type,V.Approved,VD.Voucher_Detail_ID,V.Voucher_ID,
          VD.Dr_Amount,VD.Cr_Amount, L.Ledger_Name, L.Ledger_ID
FROM       Ufms.FMS_VoucherDetails AS VD INNER JOIN
                 Ufms.FMS_Vouchers AS V ON VD.Voucher_ID=V.Voucher_ID INNER JOIN
                 Ufms.FMS_Ledgers AS L ON VD.Ledger_ID=L.Ledger_ID
                 WHERE L.Ledger_Id in (select ledger_id from Ufms.Fms_SelectLedgersCash_View) and  (V.Is_Active = 1) AND (V.Is_Deleted = 0) and (Vd.Is_Active = 1) AND (Vd.Is_Deleted = 0)and (l.Is_Active = 1) AND (l.Is_Deleted = 0)
END
=========================================================

 ===========This retrive how many child ledgers are in a parentLedger(cash) =================

 Create view  Fms_SelectLedgersCash_View
 as
   WITH Ledgers AS (SELECT        Ledger_ID
                               FROM Ufms.FMS_Ledgers
                               WHERE Ledger_ID = '1'
                              UNION ALL

                              SELECT C.Ledger_ID
                              FROM Ledgers AS f INNER JOIN
                              Ufms.FMS_Ledgers AS c ON f.Ledger_ID=c.Parent_Ledger_ID
                              WHERE c.is_Active=1 and c.is_Deleted=0)
         SELECT        Ledger_ID
     FROM            Ledgers AS Ledgers_1

===================================================================
Auto Generated Store Procedure
ALTER PROCEDURE [Ufms].[KC_InsertVouchers]
(
--@Voucher_No varchar(50),
@Voucher_Date datetime,
@Company_ID int,
@Voucher_Type varchar(50),
@Voucher_Amount decimal(18,2),
@Transaction_Type varchar(50),
@Description varchar(500),
--@Created_On datetime,
@Created_By int,
--@Modified_On datetime,
@Modified_By int,
@Out1 int output,
@Out2 varchar(30) output,
@Bank_Reconciliation_Date datetime =null,
-- Parameters for VoucherDetails
@DataTableVoucherDetails AS Ufms.VoucherDetailsType READONLY,
@Mode varchar(10)=null,
@vID int=null
)
   
AS
    BEGIN
    BEGIN TRANSACTION
    BEGIN TRY

    IF(@Mode!='Edit')
        BEGIN
    --Get the last Voucher No
        DECLARE @Voucher_No varchar(30)
        SELECT @Voucher_No=Voucher_No FROM Ufms.FMS_Vouchers WHERE Voucher_Type=@Voucher_Type
        DECLARE @Year int
        SELECT @Year=year(getdate())
        -- Generate the current Financial Year
        DECLARE @FYear varchar(10)
        IF MONTH(GETDATE())<3
            BEGIN
                SELECT @FYear=CONVERT(VARCHAR, @Year-1)+'-'+CONVERT(VARCHAR, @Year)
            END
        ELSE
            BEGIN
                SELECT @FYear=CONVERT(VARCHAR, @Year)+'-'+CONVERT(VARCHAR, @Year+1)
            END
        --Get the setup informations for voucher creation
                DECLARE @Prefix varchar(10)
                DECLARE @With_Financial_Year bit
                DECLARE @Auto_Number_Size int
                SELECT @Prefix=Prefix, @With_Financial_Year=With_Financial_Year, @Auto_Number_Size=Auto_Number_Size
                FROM Ufms.FMS_VoucherSetupDetails
                WHERE Voucher_Type=@Voucher_Type AND Company_ID=@Company_ID
                SELECT @Auto_Number_Size
                --Check the autonumber size
            --Set the auto number size
            DECLARE @i INT
            SET @i=1
            DECLARE @Size VARCHAR(10)
            SET @Size=''
            WHILE(@i<@Auto_Number_Size)
                BEGIN
                    SET @Size=@Size+'0'
                    SET @i=@i+1
                END
        --If It's a first voucher entry then generate the 1st voucher no. formats according to the setup
        IF @Voucher_No IS NULL
            BEGIN
                SET @Size=@Size+'1'
                --Define VoucherNo
                IF @With_Financial_Year=1
                    BEGIN
                        SELECT @Voucher_No=@Prefix+'/'+@Size+'/'+@FYear
                    END
                ELSE
                    BEGIN
                        SELECT @Voucher_No=@Prefix+'/'+@Size
                    END
            END
        ELSE
        -- If Voucher no is already generated
            BEGIN
                DECLARE @P1 VARCHAR(20)
                DECLARE @P2 VARCHAR(20)
                DECLARE @l int
                SET @l=LEN(@Prefix)
                SET @P1=Substring(@Voucher_No,1,@l)
                SET @P2=Substring(@Voucher_No,@l+2,@Auto_Number_Size)
                SET @P2=cast(@P2 as int)+1
                SET @Size=@Size+'0'
                SET @P2=RIGHT(@Size + RTRIM(@P2),@Auto_Number_Size)

                IF @With_Financial_Year=1
                    BEGIN
                        DECLARE @P3 VARCHAR(20)
                        SET @P3=Substring(@Voucher_No,@l+@Auto_Number_Size+3,9)
                        SET @Voucher_No=@P1+'/'+@P2+'/'+@P3
                        SET @Out2=@Voucher_No
                    END
                ELSE
                    BEGIN
                        SET @Voucher_No=@P1+'/'+@P2
                        SET @Out2=@Voucher_No
                    END
            END
        --Insert the record to Voucher Table
        INSERT INTO Ufms.FMS_Vouchers(
        Voucher_No,Voucher_Date,Company_ID,Voucher_Type,Voucher_Amount,
        Description,Bank_Reconciliation_Date,Created_On,Created_By,Modified_On,Modified_By)
        VALUES(
        @Voucher_No,@Voucher_Date,@Company_ID,@Voucher_Type,@Voucher_Amount,
        @Description,@Bank_Reconciliation_Date,GETDATE(),@Created_By,GETDATE(),@Modified_By)
        --SELECT @Company_ID,@Voucher_No,@Prefix,@With_Financial_Year,@Auto_Number_Size,@Size
        SET @Out1=SCOPE_IDENTITY()
        DECLARE @Voucher_ID int
        SET @Voucher_ID=SCOPE_IDENTITY()
        SET @Out2=@Voucher_No

        -- Insert Data into VoucherDetails
        INSERT INTO Ufms.FMS_VoucherDetails
        (Voucher_ID,Sl_No,Debit_Or_Credit,Ledger_ID,Dr_Amount,Cr_Amount,Transaction_Type,Cheque_Or_DD_No,Date,Bank_Name,Narration,
        Created_On,Created_By,Modified_On,Modified_By)
        SELECT
        @Voucher_ID,Sl_No,Debit_Or_Credit,Ledger_ID,Dr_Amount,Cr_Amount,Transaction_Type,Cheque_Or_DD_No,Date,Bank_Name,Narration,
        GETDATE(),@Created_By,GETDATE(),@Modified_By
        FROM @DataTableVoucherDetails

        END
    ELSE
        --For Edit
        BEGIN
        UPDATE Ufms.FMS_Vouchers
        SET
        Voucher_Date=@Voucher_Date,Company_ID=@Company_ID,Voucher_Type=@Voucher_Type,Voucher_Amount=@Voucher_Amount,
        Description=@Description,Modified_On=GETDATE(),Modified_By=@Modified_By
        WHERE
        Voucher_ID=@vID
        -- Delete Data from VoucherDetails
        DELETE FROM Ufms.FMS_VoucherDetails WHERE Voucher_ID=@vID
       
        -- Again Insert Data into VoucherDetails
        INSERT INTO Ufms.FMS_VoucherDetails
        (Voucher_ID,Sl_No,Debit_Or_Credit,Ledger_ID,Dr_Amount,Cr_Amount,Transaction_Type,Cheque_Or_DD_No,Date,Bank_Name,Narration,
        Created_On,Created_By,Modified_On,Modified_By)
        SELECT
        @vID,Sl_No,Debit_Or_Credit,Ledger_ID,Dr_Amount,Cr_Amount,Transaction_Type,Cheque_Or_DD_No,Date,Bank_Name,Narration,
        GETDATE(),@Created_By,GETDATE(),@Modified_By
        FROM @DataTableVoucherDetails

        END
        -- End of Insert Data into VoucherDetails
        --IF @@ERROR !=0
                --ROLLBACK TRAN
            --else
                --COMMIT TRAN
        COMMIT TRAN
        END TRY
        BEGIN CATCH
            ROLLBACK TRAN
        END CATCH
    END