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,
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/