Feb 24, 2022

 Query to get list of all table level indexes ....


select i.[name] as index_name,

    substring(column_names, 1, len(column_names)-1) as [columns],

    case when i.[type] = 1 then 'Clustered index'

        when i.[type] = 2 then 'Nonclustered unique index'

        when i.[type] = 3 then 'XML index'

        when i.[type] = 4 then 'Spatial index'

        when i.[type] = 5 then 'Clustered columnstore index'

        when i.[type] = 6 then 'Nonclustered columnstore index'

        when i.[type] = 7 then 'Nonclustered hash index'

        end as index_type,

    case when i.is_unique = 1 then 'Unique'

        else 'Not unique' end as [unique],

    schema_name(t.schema_id) + '.' + t.[name] as table_view, 

    case when t.[type] = 'U' then 'Table'

        when t.[type] = 'V' then 'View'

        end as [object_type]

from sys.objects t

    inner join sys.indexes i

        on t.object_id = i.object_id

    cross apply (select col.[name] + ', '

                    from sys.index_columns ic

                        inner join sys.columns col

                            on ic.object_id = col.object_id

                            and ic.column_id = col.column_id

                    where ic.object_id = t.object_id

                        and ic.index_id = i.index_id

                            order by key_ordinal

                            for xml path ('') ) D (column_names)

where t.is_ms_shipped <> 1

and index_id > 0

order by i.[name]

Feb 21, 2022

A simple job to get the user related roles information

 static void HSIN_UserAndRoles(Args _args)

{

    SecurityUserRole         securityUserRole;

    SecurityRole             securityRole;

    HSecurityRoleforUser  securityRoleforUserTmp; // My own table to store the info

    boolean                  Created;


    delete_from securityRoleforUserTmp;


    while select securityRole

        join securityUserRole

            where securityUserRole.SecurityRole == securityRole.RecId &&

                  securityUserRole.User like '*'

    {

        securityRoleforUserTmp.clear();


        securityRoleforUserTmp.User     = securityUserRole.User +" "+"("+UserInfoHelp::userName(securityUserRole.User)+")";

        securityRoleforUserTmp.Role     = securityRole.AotName;

        securityRoleforUserTmp.RoleName = securityRole.Name;


        securityRoleforUserTmp.insert();

        Created = true;

    }

    if(Created)

    {

        Info(' User roles info generated  sucessfully');

    }


}

A simple job to get roles and assigned duties

 static void HRolesAndDuties(Args _args)

{

    SecurityRole            securityRole;

    SecurityRoleTaskGrant   securityRoleTaskGrant;

    SecurityTask            securityTask;

    HSecurityDutiesperUser   hsecurityDutiesperUser; // my table to store the details

    boolean                    Created;



delete_from hsecurityDutiesperUser;


    while select  securityRole

        where securityRole.AotName like '*'

            join  securityRoleTaskGrant

            where securityRoleTaskGrant.SecurityRole == securityRole.RecId

                join securityTask

                where securityTask.RecId == securityRoleTaskGrant.SecurityTask &&

                      securityTask.Type  == SecurityTaskType::Duty

    {

       hsecurityDutiesperUser.Role   = securityRole.Name;

        hsecurityDutiesperUser.Duty   = SysLabel::labelId2String(securityTask.Name) ? SysLabel::labelId2String(securityTask.Name) : securityTask.Name;

        hsecurityDutiesperUser.Type   = securityTask.Type;

        hsecurityDutiesperUser.insert();

        Created = true;


    }

    if(Created)

    {

        Info(' Roles and duties info generated successfully');

    }

}