XML的XML属性

时间:2017-07-25 11:52:03

标签: sql-server xml

我发过的帖子与我要提出的内容类似,但我找不到任何可以解决问题的内容。我已经看到(并且重复)将XML标记添加到SQL中,但没有将标记的属性变为SQL。

背景:我们使用一个运行"事件"根据每个赛事的赛程安排。时间表是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>

1 个答案:

答案 0 :(得分: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;

如果这不是您的解决方案,请编辑您的问题:添加您自己的尝试,错误的输出和预期的输出。你的解释没有让我清楚......