Sql server 在SQL中查询XML参数

Sql server 在SQL中查询XML参数,sql-server,xml,Sql Server,Xml,周五下午这似乎是个好主意,但我有点麻烦。我以前没有使用过SQLXML查询,所以我可能只是做了一些非常愚蠢的事情。基本上,我希望传递一系列字符串以将表查询到存储过程中 我考虑了一下,考虑使用CSV,然后决定尝试使用XML。因此,我的XML看起来像: <Root> <string>value</string> <string>value</string> <string>value</string>

周五下午这似乎是个好主意,但我有点麻烦。我以前没有使用过SQLXML查询,所以我可能只是做了一些非常愚蠢的事情。基本上,我希望传递一系列字符串以将表查询到存储过程中

我考虑了一下,考虑使用CSV,然后决定尝试使用XML。因此,我的XML看起来像:

<Root>
  <string>value</string>
  <string>value</string>
  <string>value</string>
  <string>value</string>
</Root>
所以我想把XML分解成一个字符串表

我的SQL如下所示:

SELECT Child.value('(string)[1]', 'varchar(200)')
FROM @imageIDs.nodes('/Root/') AS N(Child))
但是我一直收到错误消息
XQuery[nodes()]:在“”附近出现语法错误,需要进行“节点测试”。

我很可能在这里做了一些非常愚蠢的事情,所以任何帮助都会得到感激

更新

我将其分解为一个查询来帮助:

DECLARE @imageIDs xml
SET @imageIDs = '<Root>
  <string>value</string>
  <string>value</string>
  <string>value</string>
  <string>value</string>
</Root>'

SELECT Child.value('(string)[1]', 'varchar(200)')
        FROM @imageIDs.nodes('/Root/') AS N(Child)
DECLARE@imageIDs xml
设置@imageIDs=
价值
价值
价值
价值
'
选择Child.value('(字符串)[1],'varchar(200)'
从@imageIDs.nodes('/Root/')作为N(子节点)

问题是节点函数中的最后一个
/

SELECT Child.value('(string)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root') AS N(Child)
或者

SELECT Child.value('(.)[1]', 'varchar(200)') 
FROM @imageIDs.nodes('/Root/*') AS N(Child)

取决于您试图实现的目标。

错误是由于节点表达式中拖尾了
/
。它应该是
/Root

顺便说一句,我认为您正在寻找一个
SELECT
,以表的形式返回值,这是通过以下方法实现的:

DECLARE @imageIDs XML

SELECT @imageIDs = '
<Root>
  <string>value</string>
  <string>value2</string>
  <string>value3</string>
  <string>value4</string>
</Root>'

SELECT 
    Child.value('(.)[1]', 'varchar(200)')
FROM @imageIDs.nodes('/Root/string') AS N(Child)

这很有帮助,不再得到异常,但它只返回一行?
DECLARE @imageIDs XML

SELECT @imageIDs = '
<Root>
  <string>value</string>
  <string>value2</string>
  <string>value3</string>
  <string>value4</string>
</Root>'

SELECT 
    Child.value('(.)[1]', 'varchar(200)')
FROM @imageIDs.nodes('/Root/string') AS N(Child)
value
value2
value3
value4

(4 row(s) affected)