USP_RECORDSECURITYIDMAP_REGISTERMAPPINGFUNCTION

Stored procedure for creating or updating a row in the RECORDSECURITYIDMAP table.

Parameters

Parameter Parameter Type Mode Description
@FROMRECORDTYPE nvarchar(50) IN
@TORECORDTYPE nvarchar(50) IN
@MAPPINGFUNCTION nvarchar(255) IN
@CHANGEAGENTID uniqueidentifier IN
@MAPPINGFUNCTIONFORQUERY nvarchar(255) IN

Definition

Copy


CREATE procedure dbo.[USP_RECORDSECURITYIDMAP_REGISTERMAPPINGFUNCTION]
(
  @FROMRECORDTYPE nvarchar(50),
  @TORECORDTYPE nvarchar(50),
  @MAPPINGFUNCTION nvarchar(255),
  @CHANGEAGENTID uniqueidentifier = null,
  @MAPPINGFUNCTIONFORQUERY nvarchar(255) = ''
)
as
  set nocount on;

  declare @FORQUERY bit;
  declare @ISTVF bit;
  declare @CURRENTDATE datetime = getdate();

  if @CHANGEAGENTID is null
    exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

  --When saving a mapping function for query, the @MAPPINGFUNCTION param will be empty, and the @MAPPINGFUNCTIONFORQUERY will have

  --the function name, so we need to make sure we don't overwrite the MAPPINGFUNCTION field or the ISTVF field for the normal function.

  if isnull(@MAPPINGFUNCTIONFORQUERY, '') = ''
    begin
      --Could be either an insert or update...

      set @FORQUERY = 0;
      set @ISTVF = isnull((select case when DATA_TYPE = 'TABLE' then 1 else 0 end from INFORMATION_SCHEMA.ROUTINES where ROUTINE_TYPE='FUNCTION' and ROUTINE_NAME = @MAPPINGFUNCTION),0);
    end
  else
    begin
      --Will only execute the update below...

      set @FORQUERY = 1;
      set @MAPPINGFUNCTION = '';
    end

  update dbo.[RECORDSECURITYIDMAP] set 
    [MAPPINGFUNCTION] = (case when @FORQUERY = 0 then @MAPPINGFUNCTION else [MAPPINGFUNCTION] end),
    [MAPPINGFUNCTIONFORQUERY] = (case when @FORQUERY = 1 then @MAPPINGFUNCTIONFORQUERY else [MAPPINGFUNCTIONFORQUERY] end),
    [ISTVF] = (case when @FORQUERY = 0 then @ISTVF else [ISTVF] end),
    [CHANGEDBYID] = @CHANGEAGENTID,
    [DATECHANGED] = @CURRENTDATE
  where [FROMRECORDTYPE] = @FROMRECORDTYPE
  and [TORECORDTYPE] = @TORECORDTYPE;

  if @@ROWCOUNT = 0
    --The insert will only ever happen for non-query mapping functions, so we don't need to set the MAPPINGFUNCTIONFORQUERY field here...

    insert into dbo.[RECORDSECURITYIDMAP] (
      [MAPPINGFUNCTION],
      [FROMRECORDTYPE],
      [TORECORDTYPE],
      [ISTVF],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED]
    ) values (
      @MAPPINGFUNCTION,
      @FROMRECORDTYPE,
      @TORECORDTYPE,
      @ISTVF,
      @CHANGEAGENTID,
      @CHANGEAGENTID,
      @CURRENTDATE,
      @CURRENTDATE
    );

  return 0;