我无法从SQL Server的XML列查询数据。从XML列中如何找到配置文件ID为222222的用户?请注意,XML中最多有500个用户。
<profiles>
<users>
<user>
<profileID>000000<profileID>
<username>abc</username>
</user>
<user>
<profileID>111111<profileID>
<username>def</username>
</user>
<user>
<profileID>222222<profileID>
<username>jhi</username>
</user>
</users>
</profiles>
答案 0 :(得分:0)
首先:由于缺少<profileID>
的结束标记,您的XML无效。
要让一位专用用户脱离XML,您可以尝试以下操作:
DECLARE @XML xml =
N'<profiles>
<users>
<user>
<profileID>000000</profileID>
<username>abc</username>
</user>
<user>
<profileID>111111</profileID>
<username>def</username>
</user>
<user>
<profileID>222222</profileID>
<username>jhi</username>
</user>
</users>
</profiles>';
-我们声明个人资料ID
DECLARE @userId INT=222222;
-此查询将仅返回给定ID的单个配置文件
SELECT @XML.query('/profiles/users/user[profileID/text()=sql:variable("@userId")]');
-并且此查询将在此节点内返回<username>
SELECT @XML.query('/profiles/users/user[profileID/text()=sql:variable("@userId")]').value('(user/username/text())[1]','nvarchar(max)');
主要思想称为 XQuery谓词。您可以阅读为
<user>
,但我们只需要嵌套profileID
等于我们的搜索值的节点。<username>