使用XML列而不是数据库表SQL

时间:2012-03-29 10:48:01

标签: sql xml

使用XML列而不是单独的表有什么优缺点?

实际上我目前正在使用XML数据类型的列,我需要解析此列。该列中的值可能采用以下格式

<user>
 <firstname></firstname>
 <lastname></lastname>
 <children>
   <child1>abc</child1>
   <child2>pqr</child2>
   <child3>lmn</child3>
 </children>
</user>

我需要遍历Childern节点并使用SQL查询找出三个子节点值。是否可以使用查询?

1 个答案:

答案 0 :(得分:2)

我参与了两个SQL Server / XML项目,根据这些经验,我的意见可能有偏见。

在第一种情况下,SQL Server 2005遇到了问题parsing datetimes with time zone information(因为2005通常不会识别时区)。在该项目中,XML仅用于应用程序和Web服务之间的数据传输,其中每个传出和传入的XML消息都需要记录在数据库中。

在第二种情况下,数据主要以XML格式存储,这种方法显示了SQL Server(2008)对XML的一些问题:

  • 虽然您可以在列中存储XML(包括类型和非类型),但您无法在XML中定义通常的约束:唯一性,检查,外键

  • 缺少约束隐含意味着无法保证XML中的数据一致性

  • CRUD始终意味着您始终需要编写XQuery语句来检索您操作的记录

  • 处理.Net中的数据需要将XML数据序列化为.Net代理类(xsd.exe)

  • 改变表列已经引用的XML模式是一个令人头痛的问题,因为described on my blog

  • 如果您的源XML在xml标头中包含编码属性,则SQL Server将refuse to process the XML一起完成。

如果需要在SQL中处理XML数据,则应提供“导入XML”表,并将其内容处理为常规关系表。您可以自由决定在.Net或TSQL中实现它。