2017-07-25 28 views
0

私は尋ねようとしているものに似た記事を見ましたが、実際に私の問題を解決するものは見つかりませんでした。私は、XMLタグをSQLに取得することを見た(そして複製した)が、タグの属性をSQLに取得していない。SQLへのXMLの属性

背景:各イベントのスケジュールに基づいて「イベント」を実行するプログラムを使用します。スケジュールはXML形式です。最終的には、特定のイベントが最後に実行された時刻と、そのスケジュールに基づいて最後に実行された時刻を比較しようとしています。スケジュールをXMLから取り出してテーブルに入れると、そこから取り出すことができると確信しています。しかし、私はその最初のステップで頑張っています。

以下は、テーブル(またはテーブル)に入るためのXMLです。どんな助けでも大歓迎です!!

<Schedule LastModified="2016-06-27T21:02:10.6041531Z" TimeZone="(UTC-06:00) Central Time (US &amp; Canada)" ConvertedToUTC="True" Type="Weekly"> 
    <Beginning StartDate="2016-05-26T22:26:00.0000000" /> 
    <Block BlockType="AllDay" Interval="10" IntervalType="Minute" SetType="Inclusive" Start="15:00:00" End="17:00:00" Duration="02:00:00" /> 
    <Interval Type="Weekly" RecurEveryX="1" Sunday="False" Monday="True" Tuesday="True" Wednesday="True" Thursday="True" Friday="True" Saturday="False" /> 
    <Ending Type="NoEndDate" /> 
</Schedule> 

答えて

0

あなたが問題を抱えている場所(すべての値をコーディングしなかったが、あなたのアイデアを得るでしょう)このXMLを読むことはむしろ簡単です...、知ってはいけない:

DECLARE @mockup TABLE(YourXML XML); 
INSERT INTO @mockup VALUES 
(N'<Schedule LastModified="2016-06-27T21:02:10.6041531Z" TimeZone="(UTC-06:00) Central Time (US &amp; Canada)" ConvertedToUTC="True" Type="Weekly"> 
    <Beginning StartDate="2016-05-26T22:26:00.0000000" /> 
    <Block BlockType="AllDay" Interval="10" IntervalType="Minute" SetType="Inclusive" Start="15:00:00" End="17:00:00" Duration="02:00:00" /> 
    <Interval Type="Weekly" RecurEveryX="1" Sunday="False" Monday="True" Tuesday="True" Wednesday="True" Thursday="True" Friday="True" Saturday="False" /> 
    <Ending Type="NoEndDate" /> 
</Schedule>'); 

SELECT m.YourXML.value(N'(/Schedule/@LastModified)[1]',N'datetime') AS Schedule_LastModified 
     ,m.YourXML.value(N'(/Schedule/@TimeZone)[1]',N'nvarchar(max)') AS Schedule_TimeZone 
     ,m.YourXML.value(N'(/Schedule/Beginning/@StartDate)[1]',N'datetime') AS Beginning_StartDate 
     ,m.YourXML.value(N'(/Schedule/Block/@BlockType)[1]',N'nvarchar(max)') AS Block_BlockType 
     ,m.YourXML.value(N'(/Schedule/Block/@Interval)[1]',N'int') AS Block_Interval 
     ,m.YourXML.value(N'(/Schedule/Interval/@Type)[1]',N'nvarchar(max)') AS Interval_Type 
FROM @mockup AS m; 

これがあなたの解決策でない場合は、質問を編集してください:あなた自身の試行、間違った出力、予想される結果を追加してください。あなたの説明は私にはっきりしていませんでした...