Modernizing Strategic Planning using StratML in SQL Server

Problem

Many organizations still rely on unstructured document formats for strategic plans and performance reports. I have heard that StratML might help provide a structured, machine-readable format, among other things, needed in modern governance and management. What is StratML and how can we use it in SQL Server?

Solution

Strategy Markup Language (StratML) is an XML-based ANSI/ISO standard vocabulary and schema for information commonly contained in strategic performance plans and reports. It is divided in three parts:

  • Part 1: Covers strategic plans (mission, vision, values, goals, and objectives); it defines why and what.
  • Part 2: Extend to performance plans and reports (indicators, results, stakeholders, etc.); it defines how and who.
  • Part 3: Focus on linking performance plans to actionable data and real-world execution, making the intentions truly trackable and interactive across systems, gaining interoperability, support for semantic web integration, performance reporting in real time, and traceability. This part connects to real-time data and tools.

There are several core elements of StratML:

  • Organization: The legal or logical entity to which the plan or report applies.
  • Mission: A brief description of the basic purpose of the organization
  • Vision: A concise and inspirational statement implicitly relating an organization’s purpose to its values, thus motivating its actions toward a future state it strives to achieve
  • Value: A principle that is important and helps to define the essential character of the organization
  • Goal: A relatively broad statement of intended results to be achieved over more than one resource allocation and performance measurement cycle
  • Objective: A target level of results against which achievement is to be measured within a single resource allocation and performance execution cycle
  • Stakeholder: An individual whose interests can be affected by or whose action can be required in order to achieve a goal or objective

In summary: Vision inspires, Goals give shape, Objectives create action, Metrics track progress, all rooted in Mission.

The XML Namespace is the vocabulary of the elements inside the XML structure to avoid element name conflicts, same names but with different meanings. When a namespace is defined for an element, all child elements with the same prefix are associated with the same namespace.

Using StratML in SQL Server

Below is a StratML database diagram.

StratML DB Diagram

Table Strategic Plan

A document identifying inputs and processes required to accomplish objectives and establishing metrics by which progress will be assessed within a single budgetary planning and resource allocation cycle.

CREATE TABLE [dbo].[SmlStrategicPlan](
    [StratPlanName] [nvarchar](250) NOT NULL,
    [StratPlanDocumentType] [nvarchar](50) NOT NULL,
    [StratPlanLanguage] [nvarchar](10)  DEFAULT (N'en'),
    [StratPlanDescription] [nvarchar](max) NULL,
    [StratPlanOtherInfo] [nvarchar](max) NULL,
    [AdmInfoIdentifier] [nvarchar](50) NULL,
    [AdmInfoStartDate] [date] NULL,
    [AdmInfoEndDate] [date] NULL,
    [AdmInfoPublicationDate] [date] NULL,
    [AdmInfoSource] [nvarchar](max) NULL,
    [SubmitterIdentifier] [nvarchar](50) NULL,
    [SubmitterGivenName] [nvarchar](80) NULL,
    [SubmitterSurname] [nvarchar](70) NULL,
    [SubmitterPhoneNumber] [nvarchar](50) NULL,
    [SubmitterEmailAddress] [nvarchar](150) NULL,
 CONSTRAINT [PK_SmlStrategicPlan] PRIMARY KEY CLUSTERED 
(
    [StratPlanName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Table Strategic Plan Core

A complex element comprised of Mission, Vision, Values, Goals, Objectives and Stakeholders, together with the children of those core elements.

CREATE TABLE [dbo].[SmlStrategicPlanCore](
    [StratPlanCoreId] [int] IDENTITY(1,1) NOT NULL,
    [StratPlanName] [nvarchar](250) NULL,
    [Vision_Description] [nvarchar](max) NULL,
    [Vision_Identifier] [nvarchar](50) NULL,
    [Mission_Description] [nvarchar](max) NULL,
    [Mission_Identifier] [nvarchar](50) NULL,
 CONSTRAINT [PK_SmlStrategicPlanCore] PRIMARY KEY CLUSTERED 
(
    [StratPlanCoreId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[SmlStrategicPlanCore]  WITH CHECK ADD  CONSTRAINT [FK_SmlStrategicPlanCore_SmlStrategicPlan] FOREIGN KEY([StratPlanName])
REFERENCES [dbo].[SmlStrategicPlan] ([StratPlanName])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
 
ALTER TABLE [dbo].[SmlStrategicPlanCore] CHECK CONSTRAINT [FK_SmlStrategicPlanCore_SmlStrategicPlan]
GO

Table Organizations

The legal or logical entity to which the plan or report applies.

CREATE TABLE [dbo].[SmlOrganizations](
    [OrgIdentifier] [nvarchar](50) NOT NULL,
    [StratPlanCoreId] [int] NULL,
    [OrgType] [nvarchar](50) NULL,
    [OrgAcronym] [nvarchar](50) NULL,
    [OrgName] [nvarchar](250) NULL,
    [OrgDescription] [nvarchar](max) NULL,
    [OrgWebsite] [nvarchar](50) NULL,
 CONSTRAINT [PK_SmlOrganizations] PRIMARY KEY CLUSTERED 
(
    [OrgIdentifier] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[SmlOrganizations]  WITH CHECK ADD  CONSTRAINT [FK_SmlOrganizations_SmlStrategicPlanCore] FOREIGN KEY([StratPlanCoreId])
REFERENCES [dbo].[SmlStrategicPlanCore] ([StratPlanCoreId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
 
ALTER TABLE [dbo].[SmlOrganizations] CHECK CONSTRAINT [FK_SmlOrganizations_SmlStrategicPlanCore]
GO

Table Stakeholders

An individual whose interests may be affected by or whose action may be required to achieve a goal or objective.

CREATE TABLE [dbo].[SmlStakeholders](
    [Identifier] [nvarchar](50) NOT NULL,
    [StakeholderName] [nvarchar](250) NOT NULL,
    [StakeholderType] [nvarchar](50) NULL,
    [StakeholderDescription] [nvarchar](max) NULL,
    [StakeholderPointOfContact] [nvarchar](500) NULL,
 CONSTRAINT [PK_SmlStakeholders_1] PRIMARY KEY CLUSTERED 
(
    [Identifier] ASC,
    [StakeholderName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Table Roles

A complex element containing other elements enabling the naming, description, and categorization of different kinds of interest’s individuals and groups may have in the achievement of goals and objectives.

CREATE TABLE [dbo].[SmlRoles](
    [Identifier] [nvarchar](50) NOT NULL,
    [StakeholderName] [nvarchar](250) NOT NULL,
    [RoleName] [nvarchar](50) NOT NULL,
    [RoleDescription] [nvarchar](max) NULL,
    [RoleType] [nvarchar](50) NULL,
 CONSTRAINT [PK_SmlRoles] PRIMARY KEY CLUSTERED 
(
    [Identifier] ASC,
    [StakeholderName] ASC,
    [RoleName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Table Values

A principle that is important and helps to define the essential character of the organization.

CREATE TABLE [dbo].[SmlValues](
    [StratPlanCoreId] [int] NOT NULL,
    [ValueName] [nvarchar](250) NOT NULL,
    [ValueDesc] [nvarchar](max) NULL,
 CONSTRAINT [PK_SmlValues_1] PRIMARY KEY CLUSTERED 
(
    [StratPlanCoreId] ASC,
    [ValueName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[SmlValues]  WITH CHECK ADD  CONSTRAINT [FK_SmlValues_SmlStrategicPlanCore] FOREIGN KEY([StratPlanCoreId])
REFERENCES [dbo].[SmlStrategicPlanCore] ([StratPlanCoreId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
 
ALTER TABLE [dbo].[SmlValues] CHECK CONSTRAINT [FK_SmlValues_SmlStrategicPlanCore]
GO

Table Goals

A relatively broad statement of intended results to be achieved over more than one resource allocation and performance measurement cycle. Supports Mission.

CREATE TABLE [dbo].[SmlGoals](
    [GoalIdentifier] [nvarchar](50) NOT NULL,
    [StratPlanCoreId] [int] NOT NULL,
    [GoalName] [nvarchar](250) NULL,
    [GoalDescription] [nvarchar](max) NULL,
    [GoalSequenceIndicator] [nvarchar](50) NULL,
    [GoalOtherInformation] [nvarchar](max) NULL,
 CONSTRAINT [PK_SmlGoals] PRIMARY KEY CLUSTERED 
(
    [GoalIdentifier] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[SmlGoals]  WITH CHECK ADD  CONSTRAINT [FK_SmlGoals_SmlStrategicPlanCore] FOREIGN KEY([StratPlanCoreId])
REFERENCES [dbo].[SmlStrategicPlanCore] ([StratPlanCoreId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
 
ALTER TABLE [dbo].[SmlGoals] CHECK CONSTRAINT [FK_SmlGoals_SmlStrategicPlanCore]
GO

Table Objectives

A target level of results against which achievement is to be measured within a single resource allocation and performance execution cycle.

CREATE TABLE [dbo].[SmlObjectives](
    [ObjectiveIdentifier] [nvarchar](50) NOT NULL,
    [GoalIdentifier] [nvarchar](50) NOT NULL,
    [ObjectiveName] [nvarchar](250) NULL,
    [ObjectiveDescription] [nvarchar](max) NULL,
    [ObjectiveSequenceIndicator] [nvarchar](50) NULL,
    [ObjectiveOtherInformation] [nvarchar](max) NULL,
 CONSTRAINT [PK_SmlObjectives] PRIMARY KEY CLUSTERED 
(
    [ObjectiveIdentifier] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[SmlObjectives]  WITH CHECK ADD  CONSTRAINT [FK_SmlObjectives_SmlGoals] FOREIGN KEY([GoalIdentifier])
REFERENCES [dbo].[SmlGoals] ([GoalIdentifier])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
 
ALTER TABLE [dbo].[SmlObjectives] CHECK CONSTRAINT [FK_SmlObjectives_SmlGoals]
GO

Table Performance Indicator

A measurement dimension, unit of measurement, and measurement instance specifying target and actual results, e.g., of inputs applied, outputs produced, processes conducted, and outcomes realized.

CREATE TABLE [dbo].[SmlPerformanceIndicator](
    [ObjectiveIdentifier] [nvarchar](50) NOT NULL,
    [ObjectiveSequenceIndicator] [nvarchar](50) NOT NULL,
    [PerfIndIdentifier] [nvarchar](50) NOT NULL,
    [PerfIndSequenceIndicator] [nvarchar](50) NULL,
    [PerfIndValueChainStage] [nvarchar](50) NULL,
    [PerfIndType] [nvarchar](50) NULL,
    [PerfIndKeyness] [nvarchar](50) NULL,
    [PerfIndMeasurementDimension] [nvarchar](50) NULL,
    [PerfIndUnitOfMeasurement] [nvarchar](50) NULL,
    [PerfIndOtherInformation] [nvarchar](max) NULL,
 CONSTRAINT [PK_SmlPerformanceIndicator] PRIMARY KEY CLUSTERED 
(
    [ObjectiveIdentifier] ASC,
    [ObjectiveSequenceIndicator] ASC,
    [PerfIndIdentifier] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[SmlPerformanceIndicator]  WITH CHECK ADD  CONSTRAINT [FK_SmlPerformanceIndicator_SmlObjectives] FOREIGN KEY([ObjectiveIdentifier])
REFERENCES [dbo].[SmlObjectives] ([ObjectiveIdentifier])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
 
ALTER TABLE [dbo].[SmlPerformanceIndicator] CHECK CONSTRAINT [FK_SmlPerformanceIndicator_SmlObjectives]
GO

Table Relationship

A conceptual association between two elements.

CREATE TABLE [dbo].[SmlRelationship](
    [PerfIndIdentifier] [nvarchar](50) NOT NULL,
    [PerfIndSequenceIndicator] [nvarchar](50) NOT NULL,
    [RelIdentifier] [nvarchar](50) NOT NULL,
    [RelType] [nvarchar](50) NULL,
    [RelName] [nvarchar](250) NULL,
    [RelDescription] [nvarchar](max) NULL,
 CONSTRAINT [PK_SmlRelationship] PRIMARY KEY CLUSTERED 
(
    [PerfIndIdentifier] ASC,
    [PerfIndSequenceIndicator] ASC,
    [RelIdentifier] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

Table Relationship Referent Identifier

The Identifier of the target (object) of a relationship.

CREATE TABLE [dbo].[SmlRelationshipRefId](
    [RelIdentifier] [nvarchar](50) NOT NULL,
    [RelReferentIdentifier] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_SmlRelationshipRefIdentifier] PRIMARY KEY CLUSTERED 
(
    [RelIdentifier] ASC,
    [RelReferentIdentifier] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Table Measurement Instance

A measurement at a point in time.

CREATE TABLE [dbo].[SmlMeasurementInstance](
    [PerfIndIdentifier] [nvarchar](50) NOT NULL,
    [PerfIndSequenceIndicator] [nvarchar](50) NOT NULL,
    [ResultType] [nvarchar](10) NOT NULL,
    [StartDate] [date] NULL,
    [EndDate] [date] NULL,
    [NumberOfUnits] [decimal](18, 2) NULL,
    [DescriptorName] [nvarchar](250) NULL,
    [DescriptorValue] [nvarchar](250) NULL,
    [Description] [nvarchar](250) NULL,
 CONSTRAINT [PK_MeasurementInstance] PRIMARY KEY CLUSTERED 
(
    [PerfIndIdentifier] ASC,
    [PerfIndSequenceIndicator] ASC,
    [ResultType] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Stored Procedure StratML File Import

The queries inside this store procedure will be created using a specific namespace PerformancePlanOrReport’. In case your sample has a different one, make the necessary changes in all queries before running.

-- =============================================
-- Author:      SCP - MSSQLTips
-- Create date: 20250428
-- Description: StratML import
-- =============================================
CREATE OR ALTER   PROCEDURE [dbo].[uspStratMLImport] 
                (@XmlFilePathAndName nvarchar(500))
AS
BEGIN
    SET NOCOUNT ON;
 
    IF LEN(@XmlFilePathAndName) = 0 OR @XmlFilePathAndName IS NULL
        RETURN;
 
    BEGIN TRY
        BEGIN TRANSACTION
 
            -- VARIABLES =====================================================================================
 
            DECLARE  @StratML XML
                    ,@StratMLStr nvarchar(MAX)
                    ,@sql NVARCHAR(MAX)
                    ,@StrategicPlanName nvarchar(250);
 
            SET @sql = N'SELECT @xmlOut = BULKDATA FROM OPENROWSET
                        (BULK ''' + @XmlFilePathAndName + 
                              ''',SINGLE_CLOB) AS BulkData(BulkData)';
 
            EXEC sp_executesql @sql,N'@xmlOut NVARCHAR(MAX) OUTPUT',@xmlOut = @StratMLStr OUTPUT;
 
            -- FIX RESERVED TERMS INSIDE XML =================================================================
 
            SET @StratMLStr = REPLACE(@StratMLStr,'&','&');
 
            SET @StratML = @StratMLStr;
 
            -- RESETING ALL TABLES ===========================================================================
 
            DELETE FROM  [dbo].[SmlStrategicPlan];
            DELETE FROM  [dbo].[SmlStrategicPlanCore];
                DBCC CHECKIDENT ('dbo.SmlStrategicPlanCore', RESEED, 0);
            DELETE FROM  [dbo].[SmlMeasurementInstance];
            DELETE FROM  [dbo].[SmlRelationshipRefId];
            DELETE FROM  [dbo].[SmlRelationship];
            DELETE FROM  [dbo].[SmlPerformanceIndicator];
            DELETE FROM  [dbo].[SmlObjectives];
            DELETE FROM  [dbo].[SmlGoals];
            DELETE FROM  [dbo].[SmlValues];
            DELETE FROM  [dbo].[SmlRoles];
            DELETE FROM  [dbo].[SmlStakeholders];
            DELETE FROM  [dbo].[SmlOrganizations];
 
            -- STRATEGIC PLAN ================================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlStrategicPlan]
                                ([StratPlanDocumentType]
                                ,[StratPlanLanguage]
                                ,[StratPlanName]
                                ,[StratPlanDescription]
                                ,[StratPlanOtherInfo]
                                ,[AdmInfoIdentifier]
                                ,[AdmInfoStartDate]
                                ,[AdmInfoEndDate]
                                ,[AdmInfoPublicationDate]
                                ,[AdmInfoSource]
                                ,[SubmitterIdentifier]
                                ,[SubmitterGivenName]
                                ,[SubmitterSurname]
                                ,[SubmitterPhoneNumber]
                                ,[SubmitterEmailAddress])
                    SELECT         SP.value('(@Type)[1]','nvarchar(50)') AS spType
                                ,NULLIF(SP.value('(@Language)[1]','nvarchar(50)'),'') AS spLanguage
                                ,SP.value('(Name)[1]','nvarchar(250)') AS spName
                                ,SP.value('(Description)[1]','nvarchar(250)') AS spDescription
                                ,SP.value('(OtherInformation)[1]','nvarchar(MAX)') AS OtherInformation
                                ,SP.value('(AdministrativeInformation/Identifier)[1]','nvarchar(50)') AS AdmInfoIdentifier
                                ,NULLIF(SP.value('(AdministrativeInformation/StartDate)[1]','nvarchar(50)'),'') AS AdmInfoStartDate
                                ,NULLIF(SP.value('(AdministrativeInformation/EndDate)[1]','nvarchar(50)'),'') AS AdmInfoEndDate
                                ,NULLIF(SP.value('(AdministrativeInformation/PublicationDate)[1]','nvarchar(50)'),'') AS AdmInfoPublicationDate
                                ,SP.value('(AdministrativeInformation/Source)[1]','nvarchar(MAX)') AS AdmInfoSource
                                ,SP.value('(Submitter/Identifier)[1]','nvarchar(50)') AS SubmitterIdentifier
                                ,SP.value('(Submitter/GivenName)[1]','nvarchar(80)') AS SubmitterGivenName
                                ,SP.value('(Submitter/Surname)[1]','nvarchar(80)') AS SubmitterSurname
                                ,NULLIF(SP.value('(Submitter/PhoneNumber)[1]','nvarchar(50)'),'') AS SubmitterPhoneNumber
                                ,NULLIF(SP.value('(Submitter/EmailAddress)[1]','nvarchar(500)'),'') AS SubmitterEmailAddress
                        FROM     @StratML.nodes('PerformancePlanOrReport') AS T2(SP);
 
            SELECT       @StrategicPlanName = [StratPlanName] 
                FROM     [dbo].[SmlStrategicPlan];
 
            -- STRATEGIC PLAN CORE ===========================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlStrategicPlanCore]
                                ([StratPlanName]
                                ,[Vision_Description]
                                ,[Vision_Identifier]
                                ,[Mission_Description]
                                ,[Mission_Identifier])
                     SELECT         @StrategicPlanName
                                ,Det.value('(Vision/Description)[1]','nvarchar(MAX)') AS Vision
                                ,Det.value('(Vision/Identifier)[1]','nvarchar(MAX)') AS VisionId
                                ,Det.value('(Mission/Description)[1]','nvarchar(MAX)') AS Mission
                                ,Det.value('(Mission/Identifier)[1]','nvarchar(MAX)') AS MissionId
                        FROM     @StratML.nodes('PerformancePlanOrReport/StrategicPlanCore') AS T2(Det);
 
            DECLARE @StrategicPlanCoreId int = SCOPE_IDENTITY();
 
            -- ORGANIZATION ==================================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlOrganizations]
                                ([OrgName]
                                ,[OrgAcronym]
                                ,[OrgIdentifier]
                                ,[OrgDescription]
                                ,[OrgType])
                    SELECT         Org.value('(Name)[1]','nvarchar(250)') AS [Name]
                                ,Org.value('(Acronym)[1]','nvarchar(50)') AS [Acronym]
                                ,Org.value('(Identifier)[1]','nvarchar(50)') AS [Identifier]
                                ,NULLIF(Org.value('(Description)[1]','nvarchar(MAX)'),'') AS [Description]
                                ,NULLIF(Org.value('(@SpecialOrganizationTypeType)[1]','nvarchar(50)'),'') AS [Identifier]
                        FROM     @StratML.nodes('PerformancePlanOrReport/StrategicPlanCore/Organization') AS T2(Org);
 
            -- ORGANIZATION STAKEHOLDERS =====================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlStakeholders]
                                ([Identifier]
                                ,[StakeholderType]
                                ,[StakeholderName]
                                ,[StakeholderDescription]
                                ,[StakeholderPointOfContact])
                    SELECT       OShdr.value('(../Identifier)[1]','nvarchar(50)') AS OrgIdentifier
                                ,NULLIF(OShdr.value('(@StakeholderTypeType)[1]','nvarchar(50)'),'') AS StakeholderType
                                ,OShdr.value('(Name)[1]','nvarchar(250)') AS StakeholderName
                                ,NULLIF(OShdr.value('(Description)[1]','nvarchar(MAX)'),'') AS StakeholderDescription
                                ,NULLIF(OShdr.value('(PointOfContact)[1]','nvarchar(500)'),'') AS StakeholderPointOfContact
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Organization/Stakeholder') AS XTbl(OShdr);
 
            -- ORGANIZATION STAKEHOLDER ROLES ================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlRoles]
                                ([Identifier]
                                ,[StakeholderName]
                                ,[RoleName]
                                ,[RoleDescription]
                                ,[RoleType])
                    SELECT       Roles.value('(../../Identifier)[1]','nvarchar(50)') AS Identifier
                                ,Roles.value('(../Name)[1]','nvarchar(250)') AS StakeholderName
                                ,Roles.value('(Name)[1]','nvarchar(50)') AS StakeholderRoleName
                                ,NULLIF(Roles.value('(Description)[1]','nvarchar(MAX)'),'') AS StakeholderRoleDescription
                                ,NULLIF(Roles.value('(RoleType)[1]','nvarchar(50)'),'') AS StakeholderRoleType
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Organization/Stakeholder/Role') AS XTbl(Roles);
 
            -- VALUES ========================================================================================
        
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlValues]
                                ([StratPlanCoreId]
                                ,[ValueName]
                                ,[ValueDesc])
                    SELECT       @StrategicPlanCoreId
                                ,sValue.value('(Name)[1]','nvarchar(250)') AS ValueName
                                ,sValue.value('(Description)[1]','nvarchar(MAX)') AS ValueDescription
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Value') AS XTbl(sValue);    
        
            -- GOALS =========================================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlGoals]
                                ([StratPlanCoreId]
                                ,[GoalName]
                                ,[GoalDescription]
                                ,[GoalIdentifier]
                                ,[GoalSequenceIndicator]
                                ,[GoalOtherInformation])
                    SELECT       @StrategicPlanCoreId
                                ,Goal.value('(Name)[1]','nvarchar(250)') AS GoalName
                                ,Goal.value('(Description)[1]','nvarchar(MAX)') AS GoalDescription
                                ,Goal.value('(Identifier)[1]','nvarchar(50)') AS GoalIdentifier
                                ,Goal.value('(SequenceIndicator)[1]','nvarchar(50)') AS GoalSequenceIndicator
                                ,Goal.value('(OtherInformation)[1]','nvarchar(MAX)') AS GoalOtherInformation
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal') AS XTbl(Goal);
 
            -- GOALS STAKEHOLDERS =====================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlStakeholders]
                                ([Identifier]
                                ,[StakeholderType]
                                ,[StakeholderName]
                                ,[StakeholderDescription]
                                ,[StakeholderPointOfContact])
                    SELECT       OShdr.value('(../Identifier)[1]','nvarchar(50)') AS OrgIdentifier
                                ,NULLIF(OShdr.value('(@StakeholderTypeType)[1]','nvarchar(50)'),'') AS StakeholderType
                                ,OShdr.value('(Name)[1]','nvarchar(250)') AS StakeholderName
                                ,NULLIF(OShdr.value('(Description)[1]','nvarchar(MAX)'),'') AS StakeholderDescription
                                ,NULLIF(OShdr.value('(PointOfContact)[1]','nvarchar(500)'),'') AS StakeholderPointOfContact
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Stakeholder') AS XTbl(OShdr);
 
            -- GOALS STAKEHOLDER ROLES ================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlRoles]
                                ([Identifier]
                                ,[StakeholderName]
                                ,[RoleName]
                                ,[RoleDescription]
                                ,[RoleType])
                    SELECT       Roles.value('(../../Identifier)[1]','nvarchar(50)') AS Identifier
                                ,Roles.value('(../Name)[1]','nvarchar(250)') AS StakeholderName
                                ,Roles.value('(Name)[1]','nvarchar(50)') AS StakeholderRoleName
                                ,NULLIF(Roles.value('(Description)[1]','nvarchar(MAX)'),'') AS StakeholderRoleDescription
                                ,NULLIF(Roles.value('(RoleType)[1]','nvarchar(50)'),'') AS StakeholderRoleType
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Stakeholder/Role') AS XTbl(Roles);
 
            -- GOAL OBJECTIVES ===============================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlObjectives]
                                ([GoalIdentifier]
                                ,[ObjectiveName]
                                ,[ObjectiveDescription]
                                ,[ObjectiveIdentifier]
                                ,[ObjectiveSequenceIndicator]
                                ,[ObjectiveOtherInformation])
                    SELECT       Obj.value('(../Identifier)[1]','nvarchar(50)') AS GoalIdentifier
                                ,Obj.value('(Name)[1]','nvarchar(250)') AS ObjectiveName
                                ,Obj.value('(Description)[1]','nvarchar(MAX)') AS ObjectiveDescription
                                ,Obj.value('(Identifier)[1]','nvarchar(50)') AS ObjectiveIdentifier
                                ,Obj.value('(SequenceIndicator)[1]','nvarchar(50)') AS ObjectiveSequenceIndicator
                                ,NULLIF(Obj.value('(OtherInformation)[1]','nvarchar(MAX)'),'') AS ObjectiveOtherInformation
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective') AS XTbl(Obj);
                    
            -- OBJECTIVE STAKEHOLDERS ========================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlStakeholders]
                                ([Identifier]
                                ,[StakeholderType]
                                ,[StakeholderName]
                                ,[StakeholderDescription]
                                ,[StakeholderPointOfContact])
                    SELECT       OShdr.value('(../Identifier)[1]','nvarchar(50)') AS OrgIdentifier
                                ,NULLIF(OShdr.value('(@StakeholderTypeType)[1]','nvarchar(50)'),'') AS StakeholderType
                                ,OShdr.value('(Name)[1]','nvarchar(250)') AS StakeholderName
                                ,NULLIF(OShdr.value('(Description)[1]','nvarchar(MAX)'),'') AS StakeholderDescription
                                ,NULLIF(OShdr.value('(PointOfContact)[1]','nvarchar(500)'),'') AS StakeholderPointOfContact
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/Stakeholder') AS XTbl(OShdr);
 
            -- OBJECTIVE STAKEHOLDER ROLES ===================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlRoles]
                                ([Identifier]
                                ,[StakeholderName]
                                ,[RoleName]
                                ,[RoleDescription]
                                ,[RoleType])
                    SELECT       Roles.value('(../../Identifier)[1]','nvarchar(50)') AS Identifier
                                ,Roles.value('(../Name)[1]','nvarchar(250)') AS StakeholderName
                                ,Roles.value('(Name)[1]','nvarchar(50)') AS StakeholderRoleName
                                ,NULLIF(Roles.value('(Description)[1]','nvarchar(MAX)'),'') AS StakeholderRoleDescription
                                ,NULLIF(Roles.value('(RoleType)[1]','nvarchar(50)'),'') AS StakeholderRoleType
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/Stakeholder/Role') AS XTbl(Roles)
                        WHERE    Roles.value('(Name)[1]','nvarchar(50)') <> '';
 
 
            -- OBJECTIVE PERFORMANCE =========================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlPerformanceIndicator]
                                ([ObjectiveIdentifier]
                                ,[ObjectiveSequenceIndicator]
                                ,[PerfIndIdentifier]
                                ,[PerfIndSequenceIndicator]
                                ,[PerfIndValueChainStage]
                                ,[PerfIndType]
                                ,[PerfIndKeyness]
                                ,[PerfIndMeasurementDimension]
                                ,[PerfIndUnitOfMeasurement]
                                ,[PerfIndOtherInformation])
                    SELECT       PerfInd.value('(../Identifier)[1]','nvarchar(50)') AS ObjectiveIdentifier
                                ,PerfInd.value('(../SequenceIndicator)[1]','nvarchar(50)') AS ObjectiveSequenceIndicator
                                ,PerfInd.value('(Identifier)[1]','nvarchar(50)') AS PerfIndIdentifier
                                ,NULLIF(PerfInd.value('(SequenceIndicator)[1]','nvarchar(50)'),'') AS PerfIndSequenceIndicator
                                ,NULLIF(PerfInd.value('(@ValueChainStage)[1]','nvarchar(50)'),'') AS PerfIndSequenceIndicator
                                ,NULLIF(PerfInd.value('(@PerformanceIndicatorTypeType)[1]','nvarchar(50)'),'') AS PerfIndSequenceIndicator
                                ,NULLIF(PerfInd.value('(@Keyness)[1]','nvarchar(50)'),'') AS PerfIndSequenceIndicator
                                ,NULLIF(PerfInd.value('(MeasurementDimension)[1]','nvarchar(50)'),'') AS PerfIndMeasurementDimension
                                ,NULLIF(PerfInd.value('(UnitOfMeasurement)[1]','nvarchar(50)'),'') AS PerfIndUnitOfMeasurement
                                ,NULLIF(PerfInd.value('(OtherInformation)[1]','nvarchar(MAX)'),'') AS PerfIndOtherInformation
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/PerformanceIndicator') AS XTbl(PerfInd);
 
            -- PERFORMANCE RELATIONSHIP ======================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlRelationship]
                                ([PerfIndIdentifier]
                                ,[PerfIndSequenceIndicator]
                                ,[RelIdentifier]
                                ,[RelType]
                                ,[RelName]
                                ,[RelDescription])
                    SELECT       PerfInd.value('(Identifier)[1]','nvarchar(50)') AS PerfIndIdentifier
                                ,PerfInd.value('(SequenceIndicator)[1]','nvarchar(50)') AS PerfIndSequenceIndicator
                                ,Relationship.value('(Identifier)[1]','nvarchar(50)') AS RelIdentifier
                                ,NULLIF(Relationship.value('(@RelationshipType)[1]','nvarchar(50)'),'') AS RelType
                                ,NULLIF(Relationship.value('(Name)[1]','nvarchar(250)'),'') AS RelName
                                ,NULLIF(Relationship.value('(Description)[1]','nvarchar(MAX)'),'') AS RelDescription
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/PerformanceIndicator') AS XTbl(PerfInd)
                                 CROSS APPLY PerfInd.nodes('Relationship') AS R(Relationship);
 
            -- RELATIONSHIP REFERENT IDENTIFIER ==============================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlRelationshipRefId]
                                ([RelIdentifier]
                                ,[RelReferentIdentifier])
                    SELECT       Rel.value('(Identifier)[1]','nvarchar(50)') AS RelIdentifier
                                ,Rel.value('(ReferentIdentifier)[1]','nvarchar(50)') AS RelReferentIdentifier
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/PerformanceIndicator/Relationship') AS XTbl(Rel)
                        WHERE    Rel.value('(ReferentIdentifier)[1]','nvarchar(50)') <> '';
 
            -- PERFORMANCE MEASUREMENTS ======================================================================
 
            WITH XMLNAMESPACES (DEFAULT 'urn:ISO:std:iso:17469:tech:xsd:PerformancePlanOrReport')
                INSERT INTO      [dbo].[SmlMeasurementInstance]
                                ([PerfIndIdentifier]
                                ,[PerfIndSequenceIndicator]
                                ,[ResultType]
                                ,[StartDate]
                                ,[EndDate]
                                ,[NumberOfUnits]
                                ,[DescriptorName]
                                ,[DescriptorValue]
                                ,[Description])
                    SELECT       MI.value('(../../Identifier)[1]','nvarchar(50)') AS PerfIndIdentifier
                                ,MI.value('(../../SequenceIndicator)[1]','nvarchar(50)') AS PerfIndSequenceIndicator
                                ,'Target'
                                ,NULLIF(MI.value('(StartDate)[1]','date'),'') AS TargResStartDate
                                ,NULLIF(MI.value('(EndDate)[1]','date'),'') AS TargResEndDate
                                ,NULLIF(MI.value('(NumberOfUnitsTypeType)[1]','nvarchar(50)'),'') AS TargResDescriptorName
                                ,NULLIF(MI.value('(Descriptor/DescriptorName)[1]','nvarchar(250)'),'') AS TargResDescriptorName
                                ,NULLIF(MI.value('(Descriptor/DescriptorValue)[1]','nvarchar(250)'),'') AS TargResDescriptorValue
                                ,NULLIF(MI.value('(Description)[1]','nvarchar(250)'),'') AS TargResDescription
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/PerformanceIndicator/MeasurementInstance/TargetResult') AS XTbl(MI)
 
                    UNION ALL
 
                    SELECT       MI.value('(../../Identifier)[1]','nvarchar(50)') AS PerfIndIdentifier
                                ,MI.value('(../../SequenceIndicator)[1]','nvarchar(50)') AS PerfIndSequenceIndicator
                                ,'Actual'
                                ,NULLIF(MI.value('(StartDate)[1]','date'),'') AS TargResStartDate
                                ,NULLIF(MI.value('(EndDate)[1]','date'),'') AS TargResEndDate
                                ,NULLIF(MI.value('(NumberOfUnitsTypeType)[1]','nvarchar(50)'),'') AS TargResDescriptorName
                                ,NULLIF(MI.value('(Descriptor/DescriptorName)[1]','nvarchar(250)'),'') AS TargResDescriptorName
                                ,NULLIF(MI.value('(Descriptor/DescriptorValue)[1]','nvarchar(250)'),'') AS TargResDescriptorValue
                                ,NULLIF(MI.value('(Description)[1]','nvarchar(250)'),'') AS TargResDescription
                        FROM     @StratML.nodes('/PerformancePlanOrReport/StrategicPlanCore/Goal/Objective/PerformanceIndicator/MeasurementInstance/ActualResult') AS XTbl(MI)
 
        COMMIT TRANSACTION
 
        SELECT @StrategicPlanName + ' loaded! ' AS StraML
 
        RETURN;
    END TRY
    BEGIN CATCH
        IF @@TRANCOUNT > 0
            BEGIN
                ROLLBACK TRANSACTION;
            END
 
            -- Print error information. 
            PRINT      'Error: ' + CONVERT(varchar(50), ERROR_NUMBER()) +
                    ', Severity: ' + CONVERT(varchar(5), ERROR_SEVERITY()) +
                    ', State: ' + CONVERT(varchar(5), ERROR_STATE()) + 
                    ', Procedure: ' + ISNULL(ERROR_PROCEDURE(), '-') + 
                    ', Line: ' + CONVERT(varchar(5), ERROR_LINE());
 
            PRINT ERROR_MESSAGE();
    END CATCH;
END;
 
GO

Stored Procedure to Show the Strategic Plan

-- =============================================
-- Author:      SCP - MSSQLTips
-- Create date: 20250428
-- Description: Return Strategic Plan values
-- =============================================
CREATE OR ALTER PROCEDURE [dbo].[uspSmlGetStrategicPlan]
AS
BEGIN
    SET NOCOUNT ON;
 
    DECLARE             @StratPlan
        TABLE        (Item nvarchar(50)
                    ,Content nvarchar(MAX));
 
    INSERT INTO         @StratPlan
        exec dbo.uspSmlGetTableValue 'Plan','SmlStrategicPlan','StratPlanName';
 
    INSERT INTO         @StratPlan
        exec dbo.uspSmlGetTableValue 'Organization','SmlOrganizations','OrgName';
 
    INSERT INTO         @StratPlan
        exec dbo.uspSmlGetTableValue 'Vision','SmlStrategicPlanCore','Vision_Description';
 
    INSERT INTO         @StratPlan
        exec dbo.uspSmlGetTableValue 'Mission','SmlStrategicPlanCore','Mission_Description';
 
    INSERT INTO         @StratPlan
        SELECT       'Value: ' + [ValueName]
                    ,[ValueDesc]
            FROM     [dbo].[SmlValues];
 
    INSERT INTO         @StratPlan
        SELECT       'Goal ' + [GoalSequenceIndicator]
                    ,[GoalDescription]
            FROM     [dbo].[SmlGoals];
 
    SELECT         Item
                ,Content 
        FROM     @StratPlan;
END
GO

Stored Procedure to Retrieve a Table Value Stored Procedure

-- =============================================
-- Author:      SCP - MSSQLTips
-- Create date: 20250428
-- Description: Return values from Table
-- =============================================
CREATE OR ALTER PROCEDURE [dbo].[uspSmlGetTableValue] 
                (@Title nvarchar(50)
                ,@Table nvarchar(50)
                ,@Column nvarchar(50)
                ,@Clause nvarchar(250) = NULL)
AS
BEGIN
    SET NOCOUNT ON;
 
    DECLARE @SQL NVARCHAR(MAX);
 
    SET @SQL = 'SELECT       @Title AS Title
                            ,CAST(' + QUOTENAME(@Column) + ' AS nvarchar(MAX)) AS Value
                    FROM ' + QUOTENAME(@Table);
 
    IF @Clause IS NOT NULL
        SET @SQL += ' WHERE ' + @Clause;
 
    SET @SQL += ';';
 
    EXEC sp_executesql @SQL, N'@Title nvarchar(200)', @Title = @Title;
END
GO

Stored Procedure to Retrieve a Goal by its Sequence Id

-- =============================================
-- Author:      SCP
-- Create date: 20250428
-- Description: Return Goal values By Sequence
-- =============================================
CREATE OR ALTER PROCEDURE [dbo].[uspSmlGetGoalBySeq]
                (@SeqIndicator nvarchar(50))
AS
BEGIN
    SET NOCOUNT ON;
 
    DECLARE  @GoalId nvarchar(MAX);
 
    SELECT       @GoalId = [GoalIdentifier]
        FROM     [dbo].[SmlGoals]
        WHERE    [GoalSequenceIndicator] = @SeqIndicator; 
 
    IF @GoalId IS NULL
        RETURN;
 
    SET @SeqIndicator = 'GOAL ' + @SeqIndicator;
 
    DECLARE             @StratPlan
        TABLE        (Item nvarchar(MAX)
                    ,Content nvarchar(MAX)
                    ,ItemId int IDENTITY);
 
    DECLARE @Clause nvarchar(MAX) = 'GoalIdentifier = ' + char(39) + @GoalId + char(39);
 
    INSERT INTO         @StratPlan
        exec dbo.uspSmlGetTableValue @SeqIndicator,'SmlGoals','GoalDescription',@Clause;
 
    INSERT INTO         @StratPlan
        VALUES      ('STAKEHOLDER(S)','');
    
    INSERT INTO         @StratPlan
        SELECT       '     ' + [StakeholderType]
                    ,[StakeholderName]
            FROM     [dbo].[SmlStakeholders]
            WHERE    [Identifier] = @GoalId AND
                     LEN([StakeholderName]) > 0;
 
    INSERT INTO         @StratPlan
        VALUES      ('OBJECTIVE(S)','');
 
    WITH CteXml AS
        (SELECT      SUBSTRING([ObjectiveSequenceIndicator]
                              ,PATINDEX('%[0-9]%', [ObjectiveSequenceIndicator])
                              ,LEN([ObjectiveSequenceIndicator])) AS Tag
                    ,[ObjectiveSequenceIndicator] AS Seq
                    ,[ObjectiveName] AS Nme
                    ,[ObjectiveDescription] AS Dsc
                    ,[GoalIdentifier] AS GId
            FROM     [dbo].[SmlObjectives])
        INSERT INTO         @StratPlan
        SELECT       REPLICATE(' ',LEN(Tag)) + ' ' + Seq + ' - ' + Nme
                    ,Dsc
            FROM     CteXml
            WHERE    GId = @GoalId
            ORDER BY Tag;
 
    SELECT         Item
                ,Content 
        FROM     @StratPlan;
END
GO

StratML Example 1

Importing a Strategic Plan

On this website, Strategy Markup Language (StratML), you can find some examples. I will use the NASA2022 Strategic Plan in this tip.

If you find any encoding problems, open the downloaded file in NOTEPAD and save it in ANSI format.

Change the folder path and file name, and run the following command:

EXEC [dbo].[uspStratMLImport] @XmlFilePathAndName = N'E:\<YOUR_FOLDER_NAME>\NASA2022.xml'
GO

The following message will appear:

Import success message

Showing the Strategic Plan Core

EXECUTE [dbo].[uspSmlGetStrategicPlan]
GO

Results:

Strategic Plan loaded

Showing the Goal by its Sequence Number

EXECUTE [dbo].[uspSmlGetGoalBySeq] 2
GO

Results:

Goal Sequence 2 loaded

StratML Example 2

Suppose that a Healthcare clinic has this Strategic Plan:

  • Strategic Goal: Improve patient outcomes and access to preventive care.
  • Objective: Increase the percentage of patients receiving annual wellness checkups.
  • Performance Indicator (KPI): Percentage of patients who completed an annual wellness checkup visit in the past 12 months.

The Target value is 80 percent, and the Actual value is 76 percent, in the Measurement Instance for this KPI.

The Actual value can be updated every night from the Electronic Health Record (EHR) and pushed to the clinic management dashboard, which can also show weekly trends and triggers to alert management to investigate if the value reaches below a certain limit.

This illustrates the importance of using StratML tables to bring the Strategic plans, normally found in PDF documents, to the database, to centralize KPIs and give the benefit of real-time actions.

Next Steps

There are a lot of StratML features that were not covered in this tip but are described in the StratML XSD documentation, including Driving Forces, PESTLE Factors, SWOT, Level types, etc.

It is much easier to have a front-end to deal with inputs and outputs of the elements of StratML, including follow-up of measurements, which gives real-time progress as it happens, allowing data-driven decision making and gaining continuous improvement looping.

Exporting your data to StratML format is easier when using nested SELECT FOR XML clauses and following the XSD rules.

Leave a Reply

Your email address will not be published. Required fields are marked *