在 XML 节点 SQL Server 查询中使用 sql:variable 出现语法错误

史蒂夫·达格利什

我一直在研究从 SQL Server 数据库中提取 XML 数据的查询。我想从 XML 中提取特定行。如果我在 .nodes 行中对 ID 进行硬编码,它会按预期工作,但是在用 sql:variable 替换硬编码值时我无法克服语法错误并且耗尽了我的 Google-foo

'''SQL
DECLARE @XML XML = '<DynamicModel>
<AvailableElements>
  <Control Id="97a0d1c6-f2b4-4f6f-8d01-f6110f1679af">
  <Property Name="Name" Value="Picklist1" />
  <Property Name="Id" Value="97a0d1c6-f2b4-4f6f-8d01-f6110f1679af" />
  <Property Name="Label" Value="Label value here" />
  <Property Name="SelectedItemId" Value="Value in here" Type="System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsRequired="True" IsReference="True" />
  <Elements />
  <AvailableElements />
</Control>
</AvailableElements>
</DynamicModel>'
DECLARE @ElementID NVARCHAR(100) = '97a0d1c6-f2b4-4f6f-8d01-f6110f1679af'

/* WORKS */
SELECT
codedValue.value('@Name[1]', 'nvarchar(500)') AS ItemName,
codedValue.value('@Value[1]', 'nvarchar(500)') AS ItemValue
FROM @XML.nodes('/DynamicModel/AvailableElements/Control[@Id="97a0d1c6-f2b4-4f6f-8d01-f6110f1679af"]/Property') AS x(codedValue)
WHERE codedValue.value('@Name[1]', 'nvarchar(500)') IN ('Text','Date','SelectedItemId','Label')

/* DOES NOT WORK */
SELECT
codedValue.value('@Name[1]', 'nvarchar(500)') AS ItemName,
codedValue.value('@Value[1]', 'nvarchar(500)') AS ItemValue
FROM    @XML.nodes('/DynamicModel/AvailableElements/Control[@Id="sql:variable("@ElementID")]/Property') AS x(codedValue)
WHERE codedValue.value('@Name[1]', 'nvarchar(500)') IN ('Text','Date','SelectedItemId','Label')
'''

硬编码版本根据 XML 返回了两行是正确的。使用 sql:variable 的版本出错并显示消息“XQuery [nodes()]: Syntax error near '@', expected ']'。”

开发

您的查询应该是这样的-

SELECT
codedValue.value('@Name[1]', 'nvarchar(500)') AS ItemName,
codedValue.value('@Value[1]', 'nvarchar(500)') AS ItemValue
FROM    @XML.nodes('/DynamicModel/AvailableElements/Control[@Id=sql:variable("@ElementID")]/Property') AS x(codedValue)
WHERE codedValue.value('@Name[1]', 'nvarchar(500)') IN ('Text','Date','SelectedItemId','Label')

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 sql 查询中使用 LIKE 时出现语法错误

来自分类Dev

SQL Server查询xml获取节点

来自分类Dev

sql server 在一个查询中使用多个节点粉碎 xml

来自分类Dev

使用 SQL 查询出现奇怪的语法错误

来自分类Dev

使用PDO和SQL Server插入日期时出现“语法错误或访问冲突”

来自分类Dev

使用PDO和SQL Server插入日期时出现“语法错误或访问冲突”

来自分类Dev

加入CTE时出现SQL Server语法错误

来自分类Dev

加入CTE时出现SQL Server语法错误

来自分类Dev

在 UPDATE 查询中使用 INTERSECT 时出现 SQL 语法错误

来自分类Dev

sql server查询显示错误,语法错误,顺序接近

来自分类Dev

Mysql查询中出现1064 Sql语法错误

来自分类Dev

使用SQL Server更新XML列的单个XML节点值

来自分类Dev

使用SQL Server更新XML列的单个XML节点值

来自分类Dev

即使在sql中使用查询也可以显示语法错误

来自分类Dev

使用MS SQL ODBC插入时出现语法错误

来自分类Dev

使用原始 SQL SELECT 命令时出现语法错误

来自分类Dev

从SQL Server 2005中的列中获取查询的xml节点

来自分类Dev

sql server查询xml相关节点

来自分类Dev

SQL查询语法错误?

来自分类Dev

SQL:查询语法错误

来自分类Dev

SQL Server:WITH AS使用不正确的语法错误

来自分类Dev

如何在SQL Server中使用XML DML更新XML节点

来自分类Dev

使用UPDATE的语法错误SQL查询

来自分类Dev

使用INSERT INTO的SQL查询语法错误

来自分类Dev

如何使用SQL Server 2016删除XML子节点

来自分类Dev

SQL Server FOR XML Path使重复节点

来自分类Dev

在SQL Server中更新XML节点

来自分类Dev

跟踪SQL Server中XML节点的流

来自分类Dev

从SQL Server创建几个相同的XML节点

Related 相关文章

热门标签

归档