USP_KPI_SELECTIONCOUNT_WITHASOF

Used to count the number of records in a selection, using an ASOF date as a point of reference for selections that are defined with relative dates.

Parameters

Parameter Parameter Type Mode Description
@SELECTIONID uniqueidentifier IN
@ASOFDATE datetime IN
@TOTAL int INOUT

Definition

Copy



create procedure [dbo].[USP_KPI_SELECTIONCOUNT_WITHASOF] 
@SELECTIONID uniqueidentifier,
@ASOFDATE datetime =null
@TOTAL int =0 output

with execute as owner as    

set nocount on;

if @ASOFDATE is null set @ASOFDATE=getdate();

if @SELECTIONID is null
begin
    RAISERROR('@SELECTIONID is required.',16,10);
    return 10;
end

if not exists(select ID from dbo.IDSETREGISTER where ID = @SELECTIONID)
BEGIN 
    raiserror('ID set does not exist in the database.', 16, 11);
    RETURN 11;
END

declare @DBOBJECTNAME nvarchar(128);
declare @DBOBJECTTYPE smallint;
declare @SQLTOEXEC nvarchar(max);
declare @USEASOFDATE bit;

select 
@USEASOFDATE = case DBOBJECTNAMEWITHASOFDATE when '' then 0 else 1 end
@DBOBJECTNAME = case DBOBJECTNAMEWITHASOFDATE when '' then DBOBJECTNAME else DBOBJECTNAMEWITHASOFDATE end,
@DBOBJECTTYPE = OBJECTTYPE 
from dbo.IDSETREGISTER where ID = @SELECTIONID;


if @DBOBJECTTYPE = 1
    begin
        set @DBOBJECTNAME = @DBOBJECTNAME + '(';
        if @USEASOFDATE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '@ASOFDATE';
        set @DBOBJECTNAME = @DBOBJECTNAME + ')';
    end;
else 
    if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @SELECTIONID) + ''')';

set @SQLTOEXEC = N'
select @TOTAL = count(*)
from 
dbo.' + @DBOBJECTNAME + ';'

exec sp_executesql @SQLTOEXEC, N'@ASOFDATE datetime, @TOTAL int output',@ASOFDATE=@ASOFDATE,@TOTAL=@TOTAL output;