Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 变量附近的语法错误,循环中应为步骤表达式(XQuery,SQL Server) DECLARE@x xml= ' '_Sql Server_Xml_Tsql_Xquery - Fatal编程技术网

Sql server 变量附近的语法错误,循环中应为步骤表达式(XQuery,SQL Server) DECLARE@x xml= ' '

Sql server 变量附近的语法错误,循环中应为步骤表达式(XQuery,SQL Server) DECLARE@x xml= ' ',sql-server,xml,tsql,xquery,Sql Server,Xml,Tsql,Xquery,我想为4级(C,D)上的每个标记获取祖先B(idB)的属性值 例如: DECLARE @x xml = '<A> <B name="235"> <A1> <C id="1.1"/> <D id="1.2" /> </A1> </B> <B name="535"> <A1>

我想为4级(C,D)上的每个标记获取祖先B(idB)的属性值

例如:

DECLARE @x xml = 
'<A>
    <B name="235">
        <A1>
            <C id="1.1"/>
            <D id="1.2" />
        </A1>
    </B>
    <B name="535">
        <A1>
            <C id="2.1"/>
            <D id="2.2" />
        </A1>
    </B>   
</A>'
DECLARE @x xml = 
N'<A>
    <B name="235">
        <A1>
            <C id="1.1"/>
            <D id="1.2" />
        </A1>
    </B>
    <B name="535">
        <A1>
            <C id="2.1"/>
            <D id="2.2" />
        </A1>
    </B>   
</A>';

SELECT @x.query('
    for $b in /A/B/A1/*
    return <node tag="{local-name($b)}">   
            <id>{data($b/@*[1])}</id>
            <idB>{data($b/../../@name)}</idB>
        </node>
');

1.1
235
1.2
235
2.1
535
2.2
535
我在SQL Server中使用XQuery:

<node tag="C">
  <id>1.1</id>
  <idB>235</idB>
</node>
<node tag="D">
  <id>1.2</id>
  <idB>235</idB>
</node>
<node tag="C">
  <id>2.1</id>
  <idB>535</idB>
</node>
<node tag="D">
  <id>2.2</id>
  <idB>535</idB>
</node>
选择@x.query('for$b in/A/b/A1/*
返回
{data($b/@*[1])}
{data(//logu[.//$b]/@*[1])}
')
但是我犯了一个错误

“$b”附近出现语法错误,应为步骤表达式


请尝试以下XQuery

SQL

DECLARE@x xml=
不
';
选择@x.query('
A/b/A1中的b美元/*
返回
{data($b/@*[1])}
{data($b/../../@name)}
');
输出


1.1
235
1.2
235
2.1
535
2.2
535
DECLARE @x xml = 
N'<A>
    <B name="235">
        <A1>
            <C id="1.1"/>
            <D id="1.2" />
        </A1>
    </B>
    <B name="535">
        <A1>
            <C id="2.1"/>
            <D id="2.2" />
        </A1>
    </B>   
</A>';

SELECT @x.query('
    for $b in /A/B/A1/*
    return <node tag="{local-name($b)}">   
            <id>{data($b/@*[1])}</id>
            <idB>{data($b/../../@name)}</idB>
        </node>
');
<node tag="C">
  <id>1.1</id>
  <idB>235</idB>
</node>
<node tag="D">
  <id>1.2</id>
  <idB>235</idB>
</node>
<node tag="C">
  <id>2.1</id>
  <idB>535</idB>
</node>
<node tag="D">
  <id>2.2</id>
  <idB>535</idB>
</node>