1

I need to create a following XML with Custom Element with attribute using Hard-code data.

Table schema: StudentMark:

CREATE TABLE [dbo].[StudentMark]
(
    [StudentMarkId] [int] IDENTITY(1,1) NOT NULL,
    [StudentId] [uniqueidentifier] NOT NULL,
    [SubjectId] [uniqueidentifier] NOT NULL,
    [Score] [int] NOT NULL,
    [ScoreInfo] [xml] NOT NULL,
    [GeneratedOn] [datetime2](2) NOT NULL,
    [IsPass] [bit] NOT NULL,
    CONSTRAINT [PK_StudentMark] 
       PRIMARY KEY CLUSTERED ([StudentMarkId] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

Sample seed data

INSERT INTO [dbo].[StudentMark] ([StudentId], [SubjectId], [ScoreInfo], [GeneratedOn], [Score], [IsPass])
VALUES ('FC3CB475-B480-4129-9190-6DE880E2D581', '0D72F79E-FB48-4D3E-9906-B78A9D105081', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-10 10:10:15', 95, 1),
       ('0F4EF48C-93E3-41AA-8295-F6B0E8D8C3A2', '0D72F79E-FB48-4D3E-9906-B78A9D105081', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-10 10:10:15', 100, 1),
       ('0F4EF48C-93E3-41AA-8295-F6B0E8D8C3A2', 'AB172272-D2E9-49E1-8040-6117BB6743DB', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-16 09:06:20', 25, 0),
       ('FC3CB475-B480-4129-9190-6DE880E2D581', 'AB172272-D2E9-49E1-8040-6117BB6743DB', '<StudentMarkAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></StudentMarkAttribute>', '2017-08-16 09:06:20', 82, 1);

Requirement: I need to add a Element <DigitallySigned> in the XML, The XML is for one Record using the where clause WHERE [StudentMarkId] = 1. Kindly see the following Template, the attribute DateSigned is exactly the same dateTime of element GeneratedOn and the value of the Element Admin is a hard-coded value.

XML Template:

<ScoreInfo>
    <DigitallySigned DateSigned="2017-08-10 10:10:15">Admin</DigitallySigned>
    <StudentMarkId>1</StudentMarkId>
    <StudentId>FC3CB475-B480-4129-9190-6DE880E2D581</StudentId>
    <SubjectId>0D72F79E-FB48-4D3E-9906-B78A9D105081</SubjectId>
    <Score>95</Score>
    <GeneratedOn>2017-08-10 10:10:15</GeneratedOn>
    <IsPass>1</IsPass>
</ScoreInfo>

I tried the following code

SELECT TOP (1) 
    (SELECT SM.[GeneratedOn] AS [DateSigned] FOR XML RAW)
      ,SM.[StudentMarkId]
      ,SM.[StudentId]
      ,SM.[SubjectId]
      ,SM.[Score]
      ,SM.[GeneratedOn]
      ,SM.[IsPass]
  FROM [DevDB].[dbo].[StudentMark] SM
  WHERE SM.[StudentMarkId] = 1
  FOR XML RAW ('ScoreInfo'), ELEMENTS

I got the following XML output

<ScoreInfo>&lt;row DateSigned="2017-08-10T10:10:15"/&gt;<StudentMarkId>1</StudentMarkId><StudentId>FC3CB475-B480-4129-9190-6DE880E2D581</StudentId><SubjectId>0D72F79E-FB48-4D3E-9906-B78A9D105081</SubjectId><Score>95</Score><GeneratedOn>2017-08-10T10:10:15</GeneratedOn><IsPass>1</IsPass></ScoreInfo>

Kindly assist me how to get the required XML.

1 Answer 1

3

Here goes.

SELECT TOP (1) 
    [GeneratedOn] AS "DigitallySigned/@DateSigned",
    'Admin' AS "DigitallySigned"
      ,SM.[StudentMarkId]
      ,SM.[StudentId]
      ,SM.[SubjectId]
      ,SM.[Score]
      ,SM.[GeneratedOn]
      ,SM.[IsPass]
  FROM [DevDB].[dbo].[StudentMark] SM
  WHERE SM.[StudentMarkId] = 1
  FOR XML PATH ('ScoreInfo');
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.