SQL将节点从XML参数传递到函数

SQL将节点从XML参数传递到函数,sql,sql-server,xml,sql-server-2008,Sql,Sql Server,Xml,Sql Server 2008,我目前正在开发一个存储过程,我想从XML参数中提取一个节点并将其传递给函数。这是参数的格式: @parameters AS XML = ' <parameters> <vkorgs> <vkorg>1010</vkorg> <vkorg>2400</vkorg> </vkorgs&g

我目前正在开发一个存储过程,我想从XML参数中提取一个节点并将其传递给函数。这是参数的格式:

    @parameters AS XML =

'     <parameters>
            <vkorgs>
                  <vkorg>1010</vkorg>
                  <vkorg>2400</vkorg>
            </vkorgs>
            <dates>
                  <datefrom>20150701</datefrom>
                  <dateto>20150805</dateto>
            </dates>
      </parameters>
'

@XML将保存生成的XML。

最简单的方法可能是以下方法。这将为您留下XML变量中所需的数据,之后您可以对其执行所需的操作(将其传递给函数等):

要分解这项工作,在
SELECT
子句中的第一列提取
vkorgs
节点,第二列定义新元素(元素的数据是列数据,元素名称是列名)
forxml路径
是一种让SQLServer生成XML的干净而简单的方法。默认情况下,它将使用包装器节点封装整个内容,但通过为该节点指定空字符串,您可以绕过该行为


TYPE
修饰符使语句返回
xml
数据类型,而不是字符串;如果使用字符串更方便,则可以更改此选项。

最简单的方法可能是以下方法。这将为您留下XML变量中所需的数据,之后您可以对其执行所需的操作(将其传递给函数等):

要分解这项工作,在
SELECT
子句中的第一列提取
vkorgs
节点,第二列定义新元素(元素的数据是列数据,元素名称是列名)
forxml路径
是一种让SQLServer生成XML的干净而简单的方法。默认情况下,它将使用包装器节点封装整个内容,但通过为该节点指定空字符串,您可以绕过该行为


TYPE
修饰符使语句返回
xml
数据类型,而不是字符串;如果您更方便地使用字符串,则可以更改此选项。

请给我们一个您尝试过的示例,并更好地解释“方法”和“showVkorg”的含义是什么?我看不出如何将第一个SQL代码段与第二个SQL代码段关联起来。你真的需要详细说明你想做什么。我编辑了我的问题来澄清问题。谢谢。你能给我们一个你尝试过的例子,并更好地解释什么是“方法”和“showVkorg”?我看不出如何将第一个SQL代码片段与第二个SQL代码片段联系起来。你真的需要详细说明你想做什么。我编辑了我的问题来澄清问题。非常感谢。
sap.werks('<method>Distribution</method>
                         <vkorgs>
                               <vkorg>2800</vkorg>
                         </vkorgs>
                         <showVkorg>0</showVkorg>')
 declare  @parameters AS XML =

'     <parameters>
            <vkorgs>
                  <vkorg>1010</vkorg>
                  <vkorg>2400</vkorg>
            </vkorgs>
            <dates>
                  <datefrom>20150701</datefrom>
                  <dateto>20150805</dateto>
            </dates>
      </parameters>
'
SELECT  1 as TAG, null as PARENT, c.value('.', 'int') AS [vkorgs!1!vkorg!ELEMENT]
FROM @parameters.nodes('/parameters/vkorgs/vkorg') AS t(c)
FOR XML EXPLICIT;
<vkorgs>
  <vkorg>1010</vkorg>
</vkorgs>
<vkorgs>
  <vkorg>2400</vkorg>
</vkorgs>
<vkorgs>
  <vkorg>1010</vkorg>
  <vkorg>2400</vkorg>
</vkorgs>
<method>Distribution</method>
<showVkorg>0</showVkorg>
<vkorgs>
      <vkorg>1010</vkorg>
      <vkorg>2400</vkorg>
    </vkorgs>
<method>Distribution</method>
<showVkorg>0</showVkorg>
sap.werks('<vkorgs>
          <vkorg>1010</vkorg>
          <vkorg>2400</vkorg>
        </vkorgs>
    <method>Distribution</method>
    <showVkorg>0</showVkorg>')
sap.werks(@XML)
DECLARE @fn_param xml

SELECT @fn_param =
(
    SELECT @parameters.query('./parameters/vkorgs'), 
        'Distribution' AS method, 0 AS ShowVkorg
    FOR XML PATH (''), TYPE
)