USP_SIMPLEDATALIST_BUSINESSPROCESSEXPORT_OUTPUTCOLUMNNAMES

Displays a list of output column names for the business process export.

Parameters

Parameter Parameter Type Mode Description
@BUSINESSPROCESSSTATUSID uniqueidentifier IN Business process status ID
@TABLEKEY nvarchar(50) IN Table key
@COLUMNSTOSUPPRESS nvarchar(max) IN Columns to suppress

Definition

Copy


CREATE procedure dbo.[USP_SIMPLEDATALIST_BUSINESSPROCESSEXPORT_OUTPUTCOLUMNNAMES]
(
  @BUSINESSPROCESSSTATUSID uniqueidentifier,
  @TABLEKEY nvarchar(50),
  @COLUMNSTOSUPPRESS nvarchar(max) = null
)
as
  set nocount on;

  declare @TABLENAME nvarchar(128);
  declare @PKCONSTRAINTNAME nvarchar(128);
  declare @PKCOLUMNNAME nvarchar(128);
  declare @SUPPRESSCOLUMNS table ([TABLE_SCHEMA] nvarchar(128), [COLUMN_NAME] nvarchar(128));
  declare @SUPPRESSCOLUMNSXML xml;
  declare @SUPPRESSCOLUMN nvarchar(128);
  declare @DOTPOSITION integer;
  declare @COLUMNMETADATA xml;

  select
    @TABLENAME = [TABLENAME],
    @COLUMNMETADATA = [COLUMNMETADATA]
  from dbo.[BUSINESSPROCESSOUTPUT]
  where [BUSINESSPROCESSSTATUSID] = @BUSINESSPROCESSSTATUSID
  and upper([TABLEKEY]) = upper(@TABLEKEY);

  select @PKCONSTRAINTNAME = [CONSTRAINT_NAME]
  from [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS]
  where [TABLE_SCHEMA] = 'dbo' and [CONSTRAINT_SCHEMA] = 'dbo'
  and [TABLE_NAME] = @TABLENAME
  and [CONSTRAINT_TYPE] = 'PRIMARY KEY';

  if @PKCONSTRAINTNAME is not null
    select @PKCOLUMNNAME = [COLUMN_NAME]
    from [INFORMATION_SCHEMA].[KEY_COLUMN_USAGE]
    where [TABLE_SCHEMA] = 'dbo' and [CONSTRAINT_SCHEMA] = 'dbo'
    and [TABLE_NAME] = @TABLENAME
    and [CONSTRAINT_NAME] = @PKCONSTRAINTNAME;

  if @COLUMNSTOSUPPRESS is not null and len(ltrim(rtrim(@COLUMNSTOSUPPRESS))) > 0
    begin
      /* columns to suppress can be expressed schema.columnname,schema.columnname or just columnname,columnname
         with the schema dbo implied */

      set @SUPPRESSCOLUMNSXML = cast(N'<ITEM>' + replace(@COLUMNSTOSUPPRESS, N',', N'</ITEM><ITEM>') + N'</ITEM>' as xml);

      insert into @SUPPRESSCOLUMNS ([COLUMN_NAME])
      select ltrim(rtrim(T.c.value('.', 'nvarchar(128)')))
      from @SUPPRESSCOLUMNSXML.nodes('/ITEM') as T(c);

      declare SCHEMACURSOR cursor local fast_forward for
        select [COLUMN_NAME] from @SUPPRESSCOLUMNS;

      open SCHEMACURSOR;
      fetch next from SCHEMACURSOR into @SUPPRESSCOLUMN;

      while (@@FETCH_STATUS = 0)
        begin
          set @DOTPOSITION = charindex(N'.', @SUPPRESSCOLUMN);

          if @DOTPOSITION > 0
            update @SUPPRESSCOLUMNS set 
              [TABLE_SCHEMA] = ltrim(rtrim(left(@SUPPRESSCOLUMN, @DOTPOSITION - 1))),
              [COLUMN_NAME] = ltrim(rtrim(right(@SUPPRESSCOLUMN, len(@SUPPRESSCOLUMN) - @DOTPOSITION)))
            where [COLUMN_NAME] = @SUPPRESSCOLUMN;

          fetch next from SCHEMACURSOR into @SUPPRESSCOLUMN;
        end

      close SCHEMACURSOR;
      deallocate SCHEMACURSOR;

      /* since the SQL below specifies [TABLE_SCHEMA] = 'dbo', take out any suppressed columns with a schema other than dbo specified */
      delete from @SUPPRESSCOLUMNS
      where [TABLE_SCHEMA] is not null and len([TABLE_SCHEMA]) > 0 and [TABLE_SCHEMA] <> 'dbo';
    end

  if not @COLUMNMETADATA is null
    insert into @SUPPRESSCOLUMNS
    select 'dbo', T.c.value('@ColumnName', 'nvarchar(128)')
    from @COLUMNMETADATA.nodes('/ColumnMetaData/Columns/Column') T(c)
    where T.c.value('@Suppress', 'nvarchar(5)') = 'true'

  select
    [C].[COLUMN_NAME] as [VALUE],
    [C].[COLUMN_NAME] as [LABEL]
  from [INFORMATION_SCHEMA].[COLUMNS] as [C]
  left outer join @SUPPRESSCOLUMNS as [S] on [S].[COLUMN_NAME] = [C].[COLUMN_NAME]
  where [C].[TABLE_SCHEMA] = 'dbo'
  and [C].[TABLE_NAME] = @TABLENAME
  and (@PKCOLUMNNAME is null or [C].[COLUMN_NAME] <> @PKCOLUMNNAME)
  and [S].[COLUMN_NAME] is null
  order by [C].[COLUMN_NAME];

  return 0;