从表值函数返回显式 Open XML 结果集

Posted

技术标签:

【中文标题】从表值函数返回显式 Open XML 结果集【英文标题】:Returning Explicit Open XML results sets from a Table Value Function 【发布时间】:2009-08-28 09:56:19 【问题描述】:

我正在尝试从 SQL Server (2008) 中的表值函数返回 Open XML 表单中的行。 当我使用“for xml explicit”选择结果时,我偶尔会遇到错误,这表明结果的顺序不能保证与我插入 TVF 输出的顺序相同。

所以我的第一个问题是:是这样吗?

如果是这样,我的下一个问题是:有没有办法解决这个问题?到目前为止,我能想到的最好的方法是在 TVF 输出中包含一个 id 列,然后在我调用它时只选择其他列,并按 id 排序。这里的问题是,这意味着我每次都必须指定所有列,而不是只选择 *,这在这种情况下真的很尴尬(特别是因为我有 42 个这样的 TVF - 都有不同的列)。

TVF 和 Explicit Open XML 是否不能混合使用(这将是一种真正的耻辱,因为它们似乎非常适合),还是我错过了一些有用的东西?

【问题讨论】:

我会订购什么?此外,我对一些单独的元素生成查询有 order bys,我想保留这些查询。到目前为止,我已经找到了一种折衷方案,我将添加它作为答案,但我仍然希望能做得更好 误解了你的帖子 - 删除了我的评论 【参考方案1】:

我找到了一种折衷方案。它仍然有点尴尬,但没有指定所有列那么糟糕。

您可以将打开的 xml 格式的列标记为“隐藏”:


[Tagname!Tagnumber!!hide]

如果我在我的输出中添加一个标识列,其名称遵循该表单,我可以在我的外部选择中对其进行排序,但如果我使用“xml 显式”,它将不会参与 xml 输出。

我仍然更喜欢“刚刚起作用”的命令,但如果这不可能,我想我应该将这个发现分享给任何感兴趣的人。

【讨论】:

以上是关于从表值函数返回显式 Open XML 结果集的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER函数之深入表值函数的处理分析

表值函数

sql2005中 表值函数是啥

sql2005中 表值函数是啥

如何从具有命名参数的表值函数创建 ADODB 记录集

sqlserver中的表值函数和标量值函数