USP_OLAP_COPYSMARTFIELDQUERYVIEWPERMISSIONS

Parameters

Parameter Parameter Type Mode Description
@SYSTEMROLEID uniqueidentifier IN

Definition

Copy


create procedure dbo.[USP_OLAP_COPYSMARTFIELDQUERYVIEWPERMISSIONS] (@SYSTEMROLEID uniqueidentifier = null)
as
begin

declare @MARTKEY nvarchar(255);

declare @CHANGEAGENTID uniqueidentifier;
exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();

declare datamart_cursor cursor local fast_forward for
    select [MARTKEY] from dbo.[OLAPDATASOURCE];

open datamart_cursor

fetch next from datamart_cursor into @MARTKEY

while @@FETCH_STATUS = 0

begin

  merge [SYSTEMROLEPERM_QUERYVIEW] as

  using 

  (
      select
      isnull([DMPERM].[ID],newid()) as [ID],
      [OLTPPERM].[SYSTEMROLEID],
      [DMQV].[ID] as [QUERYVIEWCATALOGID],
      [OLTPPERM].[GRANTORDENY],
      @CHANGEAGENTID as [ADDEDBYID], 
      @CHANGEAGENTID as [CHANGEDBYID],
      @CURRENTDATE as [DATEADDED],
      @CURRENTDATE as [DATECHANGED]
      from dbo.[SYSTEMROLEPERM_QUERYVIEW] [OLTPPERM]
          inner join dbo.[QUERYVIEWCATALOG] [OLTPQV] on [OLTPQV].[ID] = [OLTPPERM].[QUERYVIEWCATALOGID]
          inner join dbo.[SMARTFIELD] on dbo.[UFN_SMARTFIELD_GETQUERYVIEWOBJECTNAME]([SMARTFIELD].[ID])=upper([OLTPQV].[OBJECTNAME])
      inner join dbo.[QUERYVIEWCATALOG] [DMQV] on [DMQV].[MARTKEY] = @MARTKEY and (replace('V_QUERY_'+ @MARTKEY + '_SMARTFIELD' + convert(nvarchar(36),[SMARTFIELD].[TABLECATALOGID]), '-',''))=upper([DMQV].[OBJECTNAME]) 
      left join dbo.[SYSTEMROLEPERM_QUERYVIEW] [DMPERM] on [DMPERM].[QUERYVIEWCATALOGID] = [DMQV].[ID] and [DMPERM].[SYSTEMROLEID] = [OLTPPERM].[SYSTEMROLEID]
    where ([OLTPPERM].[SYSTEMROLEID] = @SYSTEMROLEID or @SYSTEMROLEID is null)
    and ([DMPERM].[ID] is null or [DMPERM].[GRANTORDENY] <> [OLTPPERM].[GRANTORDENY]) 

  ) as s on t.[ID] = s.[ID]

  when not matched by target

    then insert ([ID], [SYSTEMROLEID], [QUERYVIEWCATALOGID], [GRANTORDENY], [ADDEDBYID], [CHANGEDBYID], [DATEADDED], [DATECHANGED])

    values 
  (s.[ID], s.[SYSTEMROLEID], s.[QUERYVIEWCATALOGID], s.[GRANTORDENY], s.[ADDEDBYID], s.[CHANGEDBYID], s.[DATEADDED], s.[DATECHANGED])

  when matched 

    then update 
    set

      t.[ID] = s.[ID],
        t.[SYSTEMROLEID] = s.[SYSTEMROLEID],
        t.[QUERYVIEWCATALOGID] = s.[QUERYVIEWCATALOGID],
        t.[GRANTORDENY] = s.[GRANTORDENY],    
        t.[ADDEDBYID] = s.[ADDEDBYID],
        t.[CHANGEDBYID] = s.[CHANGEDBYID],
        t.[DATEADDED] = s.[DATEADDED],
        t.[DATECHANGED] = s.[DATECHANGED];


  ---End merge statement, handle rows deleted from [SYSTEMROLEPERM_QUERYVIEW] for OLTP smart fields


  delete from dbo.[SYSTEMROLEPERM_QUERYVIEW]
  where [ID]
  in
  (
       select
      [DMPERM].[ID]
      from dbo.[SYSTEMROLEPERM_QUERYVIEW] [DMPERM]
    inner join dbo.[QUERYVIEWCATALOG] [DMQV] on [DMQV].[MARTKEY] = @MARTKEY and [DMPERM].[QUERYVIEWCATALOGID] = [DMQV].[ID]
    inner join dbo.[SMARTFIELD] on (replace('V_QUERY_'+ @MARTKEY + '_SMARTFIELD' + convert(nvarchar(36),[SMARTFIELD].[TABLECATALOGID]), '-',''))=upper([DMQV].[OBJECTNAME]) 
    left join dbo.[QUERYVIEWCATALOG] [OLTPQV] on dbo.[UFN_SMARTFIELD_GETQUERYVIEWOBJECTNAME]([SMARTFIELD].[ID])=upper([OLTPQV].[OBJECTNAME])
    left join dbo.[SYSTEMROLEPERM_QUERYVIEW] [OLTPPERM] on [OLTPPERM].[QUERYVIEWCATALOGID] = [OLTPQV].[ID] and [DMPERM].[SYSTEMROLEID] = [OLTPPERM].[SYSTEMROLEID]
    where [OLTPPERM].[ID] is null and ([DMPERM].[SYSTEMROLEID] = @SYSTEMROLEID or @SYSTEMROLEID is null)
  );

  fetch next from datamart_cursor into @MARTKEY

end

close datamart_cursor;
deallocate datamart_cursor;

end