SQL Server中的XML数据类型?

时间:2011-07-20 14:17:00

标签: sql sql-server xml

我有一些描述每个设备设置的非结构化数据。对于例如对于设备1:

<ChartSetting xmlns="ChartSetting1">
  <ChartSizeX>132.6</ChartSizeX>
  <ChartSizeY>132.6</ChartSizeY>
  <ChartType>Native</ChartType>
  <BarSizeX>90</BarSizeX>
  <BarSizeY>6</BarSizeY>
  <DistToBar>34.8</DistToBar>
  <DistToFirstLineY>17.5</DistToFirstLineY>
  <MarkerDistance>120</MarkerDistance>
  <DistToFirstField>18.5</DistToFirstField>
  <PatchSizeX>7.5</PatchSizeX>
  <PatchSizeY>9</PatchSizeY>
</ChartSetting>

然而,对于设备2设置不同

<ChartSetting xmlns="ChartSetting2">
  <PatchGap>1</PatchGap>
  <PatchSize>5</PatchSize> 
</ChartSetting>

xml数据不用于查询目的,它将被传递给.net应用程序,最终将其发送到devicedriver(通过C ++代码) 我们只有四种类型的设备。因此,不同设置的可能性是有限的。

  1. 这种数据可以存储为符合某种模式的类型化XML吗?如果存储了无效设置,则存储为varchar将是噩梦。

    我知道xml架构集合可以有多个架构,但它只能确认一个架构。

  2. 有没有简单的方法来创建架构?

  3. 我应该使用无类型XML吗?

4 个答案:

答案 0 :(得分:2)

您可以为四种不同的设备类型创建DTD并使用这些DTD验证XML片段,但我建议您在SQL Server外部进行处理。

如果您不打算查询XML,则没有任何理由将其存储为XML数据类型。

您的问题的答案:

  1. 键入的XML:您必须为每列使用特定类型(请参阅http://msdn.microsoft.com/en-us/library/ms184277.aspx
  2. 创建一个 架构 - 请查看(http://msdn.microsoft.com/en-us/library/ms176009.aspx)并尝试 像XMLSpy这样的东西太复杂了。你的片段看起来 小,所以我认为你可以用Notepad / ++
  3. 来管理它
  4. 我使用无类型XML并在存储和/或检索时对其进行验证

答案 1 :(得分:0)

  1. 我认为创建符合两种XML的模式是不可能的。
  2. 许多XML编辑器可以从XML创建XSD,例如:Visual Studio
  3. Typed XML vs. Untyped XML

答案 2 :(得分:0)

1.我认为,如果您的架构集合包含4个不同的架构,则相关列可以包含满足集合中某个架构的xml。 2.我认为最简单的方法是让sql server为你创建一个模式(首先用所需的列创建表ChartSetting1ChartSetting2 - 不一定,你可以创建返回的SELECT所有列,但使用表格更容易),然后

DECLARE @mySchema NVARCHAR(MAX);  
SET @mySchema = N'';  
SET @mySchema =@mySchema  +   
(
  SELECT * FROM ChartSetting1 
  FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting1')
);

SET @mySchema =@mySchema  +   
(
  SELECT * FROM ChartSetting2 
  FOR XML AUTO, ELEMENTS, XMLSCHEMA('ChartSetting2')
);

CREATE XML SCHEMA COLLECTION [name] AS @mySchema;

-- we don't need these tables , drop them  
DROP TABLE ChartSetting1,ChartSetting2

3.这取决于。我想说如果你需要将XML数据限制在模式验证之外,那么使用非类型化XML是有意义的。如果模式验证涵盖了数据验证的所有方面,为什么不使用它呢?

答案 3 :(得分:-2)

XML肩膀确实作为XML存储在数据库中。 XML更像是一种传输介质而不是数据。正如你所说的那样大而难以查询。您应该将数据存储为数据(varchar int ect),然后使用PATH MODE以您想要的格式将其返回给您