USE [AIADatabaseV5] GO /****** Object: StoredProcedure [dbo].[GetNetAdDetailReport] Script Date: 2/1/2018 12:15:55 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetNetAdDetailReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[GetNetAdDetailReport] GO CREATE PROCEDURE [dbo].[GetNetAdDetailReport] -- Add the parameters for the stored procedure here -- FromDate, ToDate, LicenseType & AccountType are mandatory @sFromDate varchar(20), @sToDate varchar(20), @sLicenseType varchar(50), @sAccountType varchar(50), @iStartPrice numeric(14,2), @iEndPrice numeric(14,2) AS BEGIN IF 1=0 BEGIN SET FMTONLY OFF END -- SET NOCOUNT ON added to prevent extra result sets from SET NOCOUNT ON; DECLARE @dtFromDate DATETIME DECLARE @dtToDate DATETIME DECLARE @cGetLicenseId CURSOR DECLARE @sAccountNumber VARCHAR(50) DECLARE @sLicenseeName VARCHAR(100) DECLARE @iLicenseId INT DECLARE @iLicenseSubscriptionDetailId INT DECLARE @sEdition VARCHAR(200) DECLARE @dtRenewalDate DATETIME DECLARE @LicenseStatus VARCHAR(10) -- convert the datatype of fromdate & todate parameter to datetime SELECT @dtFromDate = CONVERT(DATETIME,@sFromDate) SELECT @dtToDate = DATEADD(ms,-3,DATEADD(DAY,1,CONVERT(DATETIME,@sToDate))) -- create a temporary table to store the second-level after clicking on the first-level of result shown in the netad subscription report on the basis of parameter CREATE TABLE #NetAdDetailReport ( AccountNumber VARCHAR(50), LicenseeName VARCHAR(100), LicenseType VARCHAR(50), Edition VARCHAR(200), RenewalDate DATETIME ) -- define the forward only, read-only cursor SET @cGetLicenseId = CURSOR FAST_FORWARD FOR SELECT License.Id, LicenseSubscriptionDetail.Id FROM LicenseSubscriptionDetail INNER JOIN License ON LicenseSubscriptionDetail.LicenseId = License.Id WHERE ((License.CancellationDate BETWEEN @dtFromDate AND @dtToDate AND License.IsActive = 0 ) OR (SubscriptionValidFrom BETWEEN @dtFromDate AND @dtToDate )) AND (TotalAmount >= (CASE WHEN @iStartPrice > 0 THEN @iStartPrice ELSE 0 END)) AND (TotalAmount <= (CASE WHEN @iEndPrice = 0 THEN 0 WHEN @iEndPrice > 0 THEN @iEndPrice ELSE 9999999999 END)) GROUP BY License.Id, LicenseSubscriptionDetail.Id -- open & fetch the cursor variables into the local variables OPEN @cGetLicenseId FETCH NEXT FROM @cGetLicenseId INTO @iLicenseId, @iLicenseSubscriptionDetailId -- start of while loop WHILE @@FETCH_STATUS = 0 BEGIN SET @sEdition = '' -- fetch the accountnumber, licenseename of a license SELECT @sAccountNumber = AccountNumber, @sLicenseeName = (LicenseeFirstName+' '+LicenseeLastName) FROM License INNER JOIN LicenseType ON License.LicenseTypeId = LicenseType.Id INNER JOIN AccountType ON License.AccountTypeId = AccountType.Id WHERE License.Id = @iLicenseId AND License.IsActive = 1 AND LicenseType.Title = @sLicenseType AND AccountType.Title = @sAccountType -- check whether the above query returns any row IF @@Rowcount > 0 BEGIN -- fetch the renewal date of the license SELECT @dtRenewalDate = LicenseSubscriptionDetail.RenewalDate FROM LicenseSubscriptionDetail WHERE LicenseSubscriptionDetail.Id = @iLicenseSubscriptionDetailId -- fetch all the editions mapped as a string with a license SELECT @sEdition = Edition.Title + '; ' + @sEdition FROM LicenseToEdition INNER JOIN Edition ON LicenseToEdition.EditionId = Edition.Id WHERE LicenseToEdition.LicenseId = @iLicenseId -- remove the trailing comma-separator from the edition-string SET @sEdition = SUBSTRING(@sEdition,1,LEN(@sEdition)-1); -- insert into the temporary table INSERT INTO #NetAdDetailReport (AccountNumber,LicenseeName,LicenseType,Edition,RenewalDate) VALUES(@sAccountNumber,@sLicenseeName,@sLicenseType,@sEdition,@dtRenewalDate) END -- fetch the next record from cursor FETCH NEXT FROM @cGetLicenseId INTO @iLicenseId, @iLicenseSubscriptionDetailId -- end of while loop END -- close the cursor to free up resources CLOSE @cGetLicenseId DEALLOCATE @cGetLicenseId -- Selecting the desired result from temporary table SELECT AccountNumber, LicenseeName, LicenseType, Edition, ISNULL(CONVERT(VARCHAR,RenewalDate,101),'') as RenewDate FROM #NetAdDetailReport -- Dropping the temporary table DROP TABLE #NetAdDetailReport END GO