使用sqlserver查询xml

使用sqlserver查询xml,sql,sql-server,xml,c#-4.0,Sql,Sql Server,Xml,C# 4.0,我不熟悉xml查询。我有一个类似xml的 <fields> <fields name = "a" active ="1" mandat ="true"/> <fields name = "a" active ="1"/> </fields> 现在我需要找到manadt为真的所有字段名。如何使用sql server查询xml。请帮助您的问题不太清楚,特别是标签(sql,xml,c#-4.0),但从您的问题文本中,我认为您需要在sql Serve

我不熟悉xml查询。我有一个类似xml的

<fields>
<fields name = "a" active ="1" mandat ="true"/>
<fields name = "a" active ="1"/>
</fields>


现在我需要找到manadt为真的所有字段名。如何使用sql server查询xml。请帮助

您的问题不太清楚,特别是标签(
sql,xml,c#-4.0
),但从您的问题文本中,我认为您需要在sql Server中查询xml的内容

你可以这样试试

DECLARE @xml XML=
N'<fields>
  <fields name="a" active="1" mandat="true" />
  <fields name="a" active="1" />
</fields>';

SELECT fld.value(N'@name',N'nvarchar(max)') AS Field_Name
      ,fld.value(N'@active',N'bit') AS Field_Active
      ,fld.value(N'@mandat',N'bit') AS Field_Mandant
FROM @xml.nodes(N'/fields/fields') AS A(fld)
更新 如果要读取字段节点的
@name
的值,其中
@mandat
为“true”,请执行以下操作:

DECLARE @xml XML=
N'<fields>
  <fields name="a" active="1" mandat="true" />
  <fields name="a" active="1" />
</fields>';

SELECT @xml.value(N'(/fields/fields[@mandat="true"]/@name)[1]',N'nvarchar(max)') AS Mandant_Name

这将只返回第一个和最后一个
节点

到目前为止您尝试了什么?你有没有遇到过类似于“SQL Server XML查询”的google?非常感谢你的快速回答。@kiran请查看我的更新。如果这解决了您的问题,那么在答案的投票计数器下方勾选接受检查将是一件好事。谢谢!您好,Shnugo,在我的xml中有两个以上的字段,其中mandat=“true”。用你提供的解决方案,我只得到第一个。如果您看到我的解决方案,我得到了所有预期值。@kiran您提供的解决方案不起作用。有各种各样的错误。无论如何,这可以(也应该!)更容易做到。看到我的更新2非常感谢你Shnugo。这对我有用。谢谢你的帮助。
DECLARE @xml XML=
N'<fields>
  <fields name="a" active="1" mandat="true" />
  <fields name="a" active="1" />
</fields>';

SELECT @xml.value(N'(/fields/fields[@mandat="true"]/@name)[1]',N'nvarchar(max)') AS Mandant_Name
DECLARE @xml XML=
N'<fields>
  <fields name="a" active="1" mandat="true" />
  <fields name="b" active="2" />
  <fields name="c" active="3" mandat="false" />
  <fields name="d" active="4" mandat="true" />
</fields>';


SELECT fld.value(N'@name',N'nvarchar(max)') AS Field_Name
      ,fld.value(N'@active',N'bit') AS Field_Active
      ,fld.value(N'@mandat',N'bit') AS Field_Mandant
FROM @xml.nodes(N'/fields/fields[@mandat="true"]') AS A(fld)