2017-08-23 11 views
1

ハードコードデータを使用して属性を持つカスタム要素で次のXMLを作成する必要があります。SQL ServerのXMLカスタム属性と要素の場合

表スキーマ: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] 

サンプル種データ

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); 

要件:私はXMLの要素<DigitallySigned>を追加する必要があり、XMLを使用して1つのレコードのですwhere句WHERE [StudentMarkId] = 1です。以下のテンプレートを参照してください。属性DateSignedは、要素GeneratedOnのまったく同じdateTimeであり、要素Adminの値はハードコードされた値です。

XMLテンプレート

<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> 

私は、次のXML出力

<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> 

が親切XMLを必要と取得する方法を、私を支援しました次のコード

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 

を試してみました。

答えて

3

ここになります。

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'); 
関連する問題