USP_MKTRECORDSOURCE_FINDINRECORDSOURCE

Returns an id for the record source that contains a specific record id.

Parameters

Parameter Parameter Type Mode Description
@RECORDID nvarchar(36) IN
@RECORDSOURCEID uniqueidentifier INOUT
@RECORDSOURCENAME nvarchar(255) INOUT
@PRIMARYKEYFIELD nvarchar(255) INOUT

Definition

Copy


CREATE procedure dbo.[USP_MKTRECORDSOURCE_FINDINRECORDSOURCE]
(
  @RECORDID nvarchar(36),
  @RECORDSOURCEID uniqueidentifier output,
  @RECORDSOURCENAME nvarchar(255) output,
  @PRIMARYKEYFIELD nvarchar(255) output
)
as
  set nocount on;

  declare @SQL nvarchar(max);
  declare @ID nvarchar(36);

  --Search all record sources...

  declare RECORDSOURCECURSOR cursor local fast_forward for
    select
      [MKTRECORDSOURCE].[ID],
      [QUERYVIEWCATALOG].[OBJECTNAME],
      [QUERYVIEWCATALOG].[PRIMARYKEYFIELD]
    from dbo.[MKTRECORDSOURCE]
    inner join dbo.[QUERYVIEWCATALOG] on [QUERYVIEWCATALOG].[ID] = [MKTRECORDSOURCE].[ID]
    where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([MKTRECORDSOURCE].[ID]) = 1;

  open RECORDSOURCECURSOR;
  fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @RECORDSOURCENAME, @PRIMARYKEYFIELD;

  while (@@FETCH_STATUS = 0)
  begin
    set @ID = null;

    set @SQL =    'select @ID = cast([' + @PRIMARYKEYFIELD + '] as nvarchar(36))' + char(13) +
                'from dbo.[' + @RECORDSOURCENAME + '] ' + char(13) +
                'where [' + @PRIMARYKEYFIELD + '] = @RECORDID';
    exec sp_executesql @SQL, N'@ID nvarchar(36) output, @RECORDID nvarchar(36)', @ID = @ID output, @RECORDID = @RECORDID;

    if @ID is not null
      break;

    fetch next from RECORDSOURCECURSOR into @RECORDSOURCEID, @RECORDSOURCENAME, @PRIMARYKEYFIELD;
  end;

  close RECORDSOURCECURSOR;
  deallocate RECORDSOURCECURSOR;

  if @ID is null
    begin
      set @RECORDSOURCEID = null;
      set @RECORDSOURCENAME = null;
      set @PRIMARYKEYFIELD = null;
    end;

  return 0;