USP_IDSET_CREATEIDSETTABLE_FROMXML

Create a static IDSet table populated with IDs from XML.

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN
@NAME nvarchar(300) IN
@DESCRIPTION nvarchar(1024) IN
@COLUMNTYPENAME nvarchar(100) IN
@RECORDTYPEID uniqueidentifier IN
@USEINQUERYDESIGNER bit IN
@CHANGEAGENTID uniqueidentifier IN
@IDSET xml IN
@IDSET_TABLENAME nvarchar(100) INOUT
@IDSET_FUNCTIONNAME nvarchar(105) INOUT
@IDSET_FUNCTIONNAME_IDEXISTS nvarchar(115) INOUT

Definition

Copy


create procedure dbo.USP_IDSET_CREATEIDSETTABLE_FROMXML
(
    @CURRENTAPPUSERID uniqueidentifier,
    @NAME nvarchar(300),
    @DESCRIPTION nvarchar(1024),
    @COLUMNTYPENAME nvarchar(100),
    @RECORDTYPEID uniqueidentifier,
    @USEINQUERYDESIGNER bit,
    @CHANGEAGENTID uniqueidentifier,
    @IDSET xml,
    @IDSET_TABLENAME nvarchar(100) output,
    @IDSET_FUNCTIONNAME nvarchar(105) output,
    @IDSET_FUNCTIONNAME_IDEXISTS nvarchar(115) output   
)
as
begin
    declare @IDSET_ID uniqueidentifier
    declare @IDSET_ADHOCQUERYID uniqueidentifier
    declare @IDSET_SMARTQUERYINSTANCEID uniqueidentifier

    select
        @IDSET_ID = IDSETREGISTER.ID,
        @IDSET_ADHOCQUERYID = IDSETREGISTERADHOCQUERY.ADHOCQUERYID,
        @IDSET_SMARTQUERYINSTANCEID = IDSETREGISTERSMARTQUERYINSTANCE.SMARTQUERYINSTANCEID,
        @IDSET_TABLENAME = IDSETREGISTER.DBOBJECTNAME
    from dbo.IDSETREGISTER
        left join dbo.IDSETREGISTERSMARTQUERYINSTANCE on IDSETREGISTER.ID = IDSETREGISTERSMARTQUERYINSTANCE.IDSETREGISTERID
        left join dbo.IDSETREGISTERADHOCQUERY on IDSETREGISTER.ID = IDSETREGISTERADHOCQUERY.IDSETREGISTERID
    where IDSETREGISTER.NAME = @NAME

    declare @ISNEW bit = 1
    if @IDSET_ID is null
    begin
        set @IDSET_TABLENAME  = 'IDSETGENERIC_' + replace(newid(),'-','_');
    end
    else
    begin
        set @ISNEW = 0

        if @IDSET_ADHOCQUERYID is not null and @IDSET_ADHOCQUERYID <> '00000000-0000-0000-0000-000000000000'
        begin
            raiserror('BBERR_SELECTIONCANNOTBECREATED_ADHOCQUERY_ASSOCIATION', 13, 1);
            return
        end

        if @IDSET_SMARTQUERYINSTANCEID is not null and @IDSET_SMARTQUERYINSTANCEID <> '00000000-0000-0000-0000-000000000000'
        begin
            raiserror('BBERR_SELECTIONCANNOTBECREATED_SMARTQUERY_ASSOCIATION', 13, 1);
            return
        end

        exec dbo.USP_IDSETREGISTER_GETAPPLOCK @IDSET_ID, 0
    end

    set @IDSET_FUNCTIONNAME = 'UFN_' + @IDSET_TABLENAME;
    set @IDSET_FUNCTIONNAME_IDEXISTS = @IDSET_FUNCTIONNAME + '_IDEXISTS';

    -- Create the static table which will hold the static ID set

    exec dbo.USP_IDSET_CREATESTATICTABLE @IDSET_TABLENAME, @COLUMNTYPENAME

    -- Create the functions associated with the ID set

    exec dbo.USP_IDSET_CREATEORUPDATE
        @IDSET_FUNCTIONNAME,
        @IDSET_TABLENAME,
        1,
        @COLUMNTYPENAME,
        '',
        '',
        null,
        @CHANGEAGENTID

    -- Create the record in the ID set register

    exec dbo.USP_IDSETREGISTER_CREATEORUPDATE
        @IDSET_ID output,
        @NAME,
        @DESCRIPTION,
        @IDSET_TABLENAME,
        0,
        @RECORDTYPEID,
        @USEINQUERYDESIGNER,
        1,
        null,
        @CHANGEAGENTID,
        @CURRENTAPPUSERID

    if @ISNEW <> 0
    begin
        exec dbo.USP_IDSETREGISTER_GETAPPLOCK @IDSET_ID, 0
    end

    declare @COUNT int = (select count(1) from @IDSET.nodes('/IDSET/ITEM') T(c))
    if @COUNT > 0
    begin
        declare @SQLTOEXEC nvarchar(max)
        set @SQLTOEXEC = 'declare @XML xml = ''' + cast(@IDSET as nvarchar(max)) + ''';'
            + ' insert into dbo.' + @IDSET_TABLENAME
            + ' select T.c.value(''(ID)[1]'',''uniqueidentifier'')'
            + ' from @XML.nodes(''/IDSET/ITEM'') T(c)'
        exec sp_executesql @SQLTOEXEC;
    end

    -- Set the rowcount on the IDSETREGISTER table...

    exec.USP_IDSETREGISTER_SETROWCOUNT @IDSET_ID, @COUNT, @CHANGEAGENTID

    -- Release the applocks using the same connection that created the applocks for this IDSet...

    exec.USP_IDSETREGISTER_RELEASEAPPLOCK @IDSET_ID, 0
end