我需要在SQL服务器中编写一个存储过程,其返回的数据将用于生成XML文件。
我的XML文件是
的结构<root>
<ANode></ANode>
<BNode></BNode>
<CNode>
<C1Node>
<C11Node></C11Node>
<C12Node></C12Node>
</C1Node>
<C2Node>
<C21Node></C21Node>
<C22Node></C22Node>
</C2Node>
<C3Node>
<C31Node></C31Node>
<C32Node></C32Node>
</C3Node>
</CNode>
</root>
我的问题是,在存储过程中我们可以选择ANode和BNode的值作为一个简单的SELECT语句,如
Select ANodeVal,BNodeVal from Table
但是如何设计存储过程以获取CNode的记录,CNode是一个子树,除了普通的ANode和BNode之外,每个记录还有3个或更多(动态)单独的节点。
答案 0 :(得分:2)
我不建议在存储过程中执行此操作。如果使用C#/ Python或Java等语言创建,则会使代码单元可测试且更易于维护。
答案 1 :(得分:2)
见
Nesting XML-returning scalar valued functions
一旦你掌握了嵌套,并且愿意写下从下到上构建节点段所需的标量值函数的数量(我不希望这些节点段有很多),那么它不是太难了
答案 2 :(得分:0)
如果您能够修改数据库设计,请考虑将每个节点保留为记录,而不是作为列(如示例select语句所示)。
例如,每行可能包含以下字段:
我假设您将数据传递给应用程序,因为您指示返回的数据将用于生成XML。在这种情况下,存储过程只是一个SELECT
语句,将格式保留给应用程序。
大多数XML引擎实现都应该允许您将子节点添加到现有父节点。 XML构建在内存中,然后通过任何必要的方法“导出”以获得所需的最终结果。