使用XML列而不是单独的表有什么优缺点?
实际上我目前正在使用XML数据类型的列,我需要解析此列。该列中的值可能采用以下格式
<user>
<firstname></firstname>
<lastname></lastname>
<children>
<child1>abc</child1>
<child2>pqr</child2>
<child3>lmn</child3>
</children>
</user>
我需要遍历Childern节点并使用SQL查询找出三个子节点值。是否可以使用查询?
答案 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中实现它。