You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CROSS APPLY从SQL Server XML表单按Culture属性提取字段名

解决SQL Server XML中提取特定Culture的独立字段名问题

我懂你的困扰——之前的查询把所有字段名都拼在了一起,没法得到单独的行。咱们用CROSS APPLY配合XML节点拆解来搞定这个问题,直接从XML里把对应Culture的字段名一行一行提取出来。

假设你的表名为FormDataTable,存储XML的列名为FormXml,下面是具体的查询语句:

SELECT
    -- 提取Field节点的原始名称(可选保留)
    Field.value('@Name', 'NVARCHAR(100)') AS OriginalFieldName,
    -- 提取对应Culture的本地化字段名
    Localization.value('(Text)[1]', 'NVARCHAR(200)') AS LocalizedFieldName,
    -- 可选:提取占位符文本
    Localization.value('(Placeholder)[1]', 'NVARCHAR(200)') AS PlaceholderText
FROM
    FormDataTable
-- 第一步:拆解Form下的所有Field节点,每行对应一个Field
CROSS APPLY
    FormXml.nodes('Form/Field') AS Fields(Field)
-- 第二步:拆解当前Field下匹配目标Culture的Localization节点
CROSS APPLY
    Field.nodes('./Localizations/Localization[@Culture="fr"]') AS Locales(Localization)

代码关键点解释:

  • FormXml.nodes('Form/Field'):把XML里每个<Field>节点转换成单独的行,让每个字段拥有独立的行记录。
  • Field.nodes('./Localizations/Localization[@Culture="fr"]'):针对每个Field,筛选出Culture属性匹配目标值的<Localization>节点,精准提取指定语言的本地化内容。
  • .value()函数:负责提取XML节点或属性的具体值,比如@Name获取Field节点的原始名称,(Text)[1]获取Localization下第一个Text节点的文本内容。

如果之前你用了STUFF+FOR XML PATH('')这类拼接字符串的方法,只要换成上面的CROSS APPLY拆解方式,就能得到独立的字段名行了。你可以根据实际需求调整Culture的值(比如改成en),或者添加其他需要提取的XML内容。

内容的提问来源于stack exchange,提问作者Jonathan Anctil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:31:05