USP_BBDW_ATTRIBUTE_GETFACTVALUES

Parameters

Parameter Parameter Type Mode Description
@ATTRIBUTEID uniqueidentifier IN
@FULLLOAD bit IN
@OPENWINDOW datetime IN
@CLOSEWINDOW datetime IN

Definition

Copy


create procedure dbo.[USP_BBDW_ATTRIBUTE_GETFACTVALUES](
  @ATTRIBUTEID uniqueidentifier,
  @FULLLOAD bit
  @OPENWINDOW datetime
  @CLOSEWINDOW datetime

as 

  --This NOP is required for the SSIS development environment to be able to detect the result set column metadata.

  if 1=null
    select 
      newid() [RECORDATTRIBUTESYSTEMID],
      newid() [ATTRIBUTESYSTEMID],
      newid() [RECORDSYSTEMID], 
      newid() [ATTRIBUTEVALUESYSTEMID], 
      current_timestamp [STARTDATE],      
      current_timestamp [ENDDATE],
      cast('No Value' as nvarchar(255)) [VALUE],
      cast('No Comment' as nvarchar(255)) [COMMENT],
      cast('1/1/2000' as date) as [VALUEDATE],
      cast(1 as bit) as [VALUEYESNO],
      cast(0 as money) as [VALUECURRENCY],
      newid() as [VALUECONSTITUENTSYSTEMID],
      cast('0000' as char(4)) as [VALUEHOURMINUTE],
      cast('20000101' as char(8)) as [VALUEFUZZYDATE],
      cast(0 as int) as [VALUENUMBER]


  declare @SQL nvarchar(max);
  declare @TABLENAME nvarchar(100);
  declare @RECORDIDCOLUMNNAME nvarchar(130);
  declare @VALUECOLUMNNAME nvarchar(128);
  declare @CODETABLENAME nvarchar(100);
  declare @ONLYALLOWONEPERRECORD bit;
  declare @DATATYPE tinyint;

  select 
    @TABLENAME = t.[TABLENAME],
    @RECORDIDCOLUMNNAME = r.[BASETABLENAME] + 'ID',
    @VALUECOLUMNNAME = a.[VALUECOLUMNNAME],
    @CODETABLENAME = ct.[DBTABLENAME],
    @DATATYPE = a.[DATATYPECODE],
    @ONLYALLOWONEPERRECORD = a.[ONLYALLOWONEPERRECORD]
  from dbo.[ATTRIBUTECATEGORY] a
  inner join dbo.[TABLECATALOG] t on a.[TABLECATALOGID] = t.[ID]
  inner join dbo.[ATTRIBUTERECORDTYPE] ar on a.[ATTRIBUTERECORDTYPEID] = ar.[ID]
  inner join dbo.[RECORDTYPE] r on ar.[RECORDTYPEID] = r.[ID]
  left join dbo.[CODETABLECATALOG] ct on a.[CODETABLECATALOGID] = ct.[ID]
  where a.[ID] = @ATTRIBUTEID;

  set @sql =  'select ' + char(13) +
              '  a.[ID] [RECORDATTRIBUTESYSTEMID],' + char(13) +
              '  @ATTRIBUTEID [ATTRIBUTESYSTEMID],' + char(13);

  --Parent is foreign key on one per record attributes

  if @ONLYALLOWONEPERRECORD = 1
    set @sql += '  a.[ID] [RECORDSYSTEMID],' + char(13);
  else                
    set @sql += '  a.[' + @RECORDIDCOLUMNNAME + '] [RECORDSYSTEMID],' + char(13);


  -- Time logic

  if @DATATYPE = 8
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  a.[' + @VALUECOLUMNNAME + '] as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end         
  end   
  -- Fuzzy date logic

  else if @DATATYPE = 7
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  a.[' + @VALUECOLUMNNAME + '] as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end         
  end    
  -- Constituent record logic

  else if @DATATYPE = 6
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  a.[' + @VALUECOLUMNNAME + ']  as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end         
  end
  --Code table logic

  else if @DATATYPE = 5
  begin
    set @sql += '  ct.[ID] [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  ct.[DESCRIPTION] [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13) + 
                'inner join dbo.[' + @CODETABLENAME + '] ct on a.[' + @VALUECOLUMNNAME + '] = ct.[ID]' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +                
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (ct.[DATECHANGED] > @OPENWINDOW and ct.[DATECHANGED] <= @CLOSEWINDOW);';
    end
  end
  --Yes/No logic

  else if @DATATYPE = 4
  begin
    set @sql += '  cast(case when a.[' + @VALUECOLUMNNAME + '] = 0 then ''00000000-0000-0000-0000-000000000001'' when a.[' + @VALUECOLUMNNAME + '] = 1 then ''00000000-0000-0000-0000-000000000002'' end as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  a.[' + @VALUECOLUMNNAME + '] as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);                

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end                
  end
  --Currency

  else if @DATATYPE = 3
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[ORGANIZATIONVALUE] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  a.[ORGANIZATIONVALUE] as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end                 
  end   
  -- Date logic

  else if @DATATYPE = 2
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  a.[' + @VALUECOLUMNNAME + '] as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end         
  end
  -- Number logic

  else if @DATATYPE = 1
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  a.[' + @VALUECOLUMNNAME + '] as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end         
  end
  --Everything else

  else
  begin
    set @sql += '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) [ATTRIBUTEVALUESYSTEMID],' + char(13) + 
                '  a.[STARTDATE] [STARTDATE],' + char(13) + 
                '  a.[ENDDATE] [ENDDATE],' + char(13) + 
                '  cast(a.[' + @VALUECOLUMNNAME + '] as nvarchar(255)) [VALUE],' + char(13) +
                '  a.[COMMENT] [COMMENT],' + char(13) +
                '  null as [VALUEDATE], ' + char(13) +
                '  null as [VALUEYESNO], ' + char(13) +
                '  null as [VALUECURRENCY], ' + char(13) +
                '  cast(''00000000-0000-0000-0000-000000000000'' as uniqueidentifier) as [VALUECONSTITUENTSYSTEMID], ' + char(13) +
                '  null as [VALUEHOURMINUTE], ' + char(13) +
                '  null as [VALUEFUZZYDATE], ' + char(13) +
                '  null as [VALUENUMBER] ' + char(13) +
                'from dbo.[' + @TABLENAME + '] a' + char(13);

    if @FULLLOAD = 0
    begin
      set @sql += 'where' + char(13) +
                  '  (a.[DATEADDED] > @OPENWINDOW and a.[DATEADDED] <= @CLOSEWINDOW) or' + char(13) +
                  '  (a.[DATECHANGED] > @OPENWINDOW and a.[DATECHANGED] <= @CLOSEWINDOW);';
    end                 
  end

  --select @SQL


  exec sp_executesql @SQL, N'@ATTRIBUTEID uniqueidentifier, @OPENWINDOW datetime, @CLOSEWINDOW datetime', @ATTRIBUTEID=@ATTRIBUTEID, @OPENWINDOW=@OPENWINDOW, @CLOSEWINDOW=@CLOSEWINDOW;