• oopes I am getting error:

    Cannot insert duplicate key row in object 'dbo.GV_Booklet' with unique index 'UN_GVBooklet_VoucherNo'. The duplicate key value is (BVD0002789).

    ALTER procedure [dbo].[BS_Voucher_CreateBooklet]

    @vouchertypeID int =2,

    @denomination int = 555,

    @quantity int = 3,

    @amountvalue int =0,

    @leaf int =2,

    @userid varchar(50) =1,

    @ValidateDays int =30

    AS

    BEGIN

    SET NOCOUNT ON;

    DECLARE

    --@vouchertype varchar(20),

    @transactionID varchar(20),

    --@count int =1,

    --@innercount int =1,

    @VoucherNumber int,

    --@max int,

    @vouchertypenew varchar(20),

    @retval varchar(20),

    @BookletID int = 0,

    @VoucherStatus int

    -- table variables receive OUTPUT

    DECLARE @VoucherNumberTable TABLE (vouchervalue INT);

    DECLARE @transactionIDTable TABLE (transactionID INT);

    DECLARE @BookletIDTable TABLE (BookletID int);

    SELECT

    @vouchertypenew = SUBSTRING(TrimmedVoucherType,1+CHARINDEX(' ',TrimmedVoucherType,1),20),

    @retval = LEFT(TrimmedVoucherType,1)

    + ISNULL(SUBSTRING(TrimmedVoucherType,1+NULLIF(CHARINDEX(' ',TrimmedVoucherType,1),0),1),'')

    FROMGV_VoucherType v

    CROSS APPLY (SELECT TrimmedVoucherType = LTRIM(RTRIM(v.vouchertype))) x

    WHEREv.VoucherTypeID = @vouchertypeID;

    --If @vouchertypenew IS NULL

    --Return -1

    SELECT @voucherstatus = VoucherStatusId FROM GV_VoucherStatus WHERE VoucherStatus = 'New';

    ------------------------------------------------------------------------------

    --Read Existing Booklet ID and set next @quantity

    ------------------------------------------------------------------------------

    --SET @BookletID = (SELECT ISNULL(MAX(RIGHT(BookletID,5)),0) FROM GV_Booklet)

    Update Gv_VoucherValue

    SET VoucherValue = ISNULL(VoucherValue,0)+ @quantity

    OUTPUT deleted.VoucherValue INTO @BookletIDTable

    WHERE VoucherAbbreviation = 'BOKID'

    SELECT @BookletID = ISNULL(BookletID,0) FROM @BookletIDTable

    --------------------------------------------------------------------------------------

    -- Read existing @VoucherNumber, set next @VoucherNumber

    --------------------------------------------------------------------------------------

    -- save off the current value to @VoucherNumber

    -- and update to the next available value

    UPDATE gv_vouchervalue

    SET vouchervalue = ISNULL(vouchervalue,0) + @leaf

    OUTPUT deleted.vouchervalue INTO @VoucherNumberTable

    WHERE voucherabbreviation = 'B' + @retval;

    SELECT @VoucherNumber = ISNULL(vouchervalue,0) FROM @VoucherNumberTable;

    --------------------------------------------------------------------------------------

    -- Read existing @transactionID, set next @transactionID

    --------------------------------------------------------------------------------------

    -- save off the current value to @transactionID

    -- and update to the next available value

    UPDATE gv_vouchervalue

    SET VoucherValue = VoucherValue + 1

    OUTPUT deleted.vouchervalue INTO @transactionIDTable

    WHERE VoucherAbbreviation = 'TRNID'

    SELECT @transactionID = ISNULL(transactionID,0) FROM @transactionIDTable;

    --------------------------------------------------------------------------------------

    -- Insert required number of rows into GV_Voucher

    --------------------------------------------------------------------------------------

    -- Inline tally table generates (@quantity) rows

    BEGIN Tran

    ;WITH E1(N) AS (

    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL

    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL

    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1),

    E2(N) AS (SELECT 1 FROM E1 a, E1 b),

    E3(N) AS (SELECT 1 FROM E2 a , E2 b, E2 c),

    --iTally(N) AS (SELECT n = ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM E2 a, E2 b, E2 c),

    Booklets as (SELECT TOP(@quantity) Bookno = @BookletID + ROW_NUMBER() OVER (ORDER BY(SELECT NULL))FROM E2),

    Pages AS (SELECT TOP(@leaf) N FROM E3)

    --select N from E3

    INSERT INTO GV_Booklet

    SELECT

    'B'+ REPLACE(STR(CONVERT(varchar,BookNo),5),' ','0') ,

    @leaf,

    @denomination,

    @vouchertypeID,

    'B' + @retval + REPLACE(STR( CAST(@VoucherNumber + ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS VARCHAR(10)),7),' ','0'),

    --'B' + @retval + CAST(@VoucherNumber + ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS VARCHAR(10)) ,

    @quantity,

    GETDATE(),

    GETDATE(),

    DATEADD(MM,6,GETDATE()),

    @VoucherStatus,

    'TRN' + Replace( Str( @transactionID + 1, 7), ' ', '0'),

    @amountvalue,

    @userid,

    @userid,

    0,

    @ValidateDays

    FROM Booklets b

    CROSS JOIN Pages p

    COMMIT TRAN

    --select * from GV_Booklet

    END

    --truncate table GV_Booklet

    _______________________________________________________________
    To get quick answer follow this link:
    http://www.sqlservercentral.com/articles/Best+Practices/61537/