回答

收藏

从具有动态指定的数据字段的XML标记中获取值

技术问答 技术问答 241 人阅读 | 0 人回复 | 2023-09-12

我有2张表:8 f8 H2 ]$ a; N5 C
表1列出了我想从XML从字段中提取XML标记名称。我通过运行此查询来模拟。. M+ [2 E0 f; i4 o* K
SELECT 'CLIENT' UNION SELECT 'FEE' UNION SELECT 'ADDRESS'4 z% Y5 |% u, {1 [' S& Z% S
这将导致单列中包含3行,从XML从标记中提取相应的数据。9 n* e$ ]" b$ O" T% y
第二个表有一个名字ClientData,它是XML格式,数千行。我的任务是从Table1中指定的XML在这种情况下,我希望从标记中提取值xml获取值:客户端,FEE和ADDRESS。; `5 p, K# N" q/ Z* R  ^8 o/ E
所以,如果XML是这个: i* `  q* U3 F7 m% c/ L
    some client    some fee    some address 运行查询后,我应该得到这个:
5 F7 g. b- `! R7 ?* G; eClient,FEE,ADDRESS
: [5 Q& a( G/ e& `) b; y0 Qsome client,some fee,some address6 |/ F$ q0 W' A7 s) B8 O
现在我有一个查询:
3 O- G: X7 `  LSELECT coalesce(Cast(ClientData as xml).value('(/XML/CLIENT)[1]','varchar(max)」,coalesce(Cast(ClientData as xml).value('(/XML/FEE)[1]','varchar(max)」,coalesce(Cast(ClientData asxml).value('(/XML/ADDRESS)[1]','varchar(max),) FROM dbo.Table2WITH(NOLOCK)
5 M; p0 C& F! X4 r! [0 Z# `1 a5 l; s这给了我必要的结果,但它不是动态的。这意味着,如果我想包括第四个xml值,可以说PHONE,我需要添加它coalesce(Cast(ClientDataas xml).value('(/XML/PHONE)[1]','varchar(max),)到SELECT中。
) ^& w! X7 m/ h  ?( _我的问题是如何动态查询,而不是Table2中的XML硬编码中提取的标记名,但使用Tabl1作为提取标记名的来源?* X* N0 U# ~7 f1 S7 ]% `1 u2 [
我希望我的解释足够好:)8 Z9 f7 b4 G) s9 g5 c
谢谢!
3 O: z+ ?/ K0 x) G8 j                                                                - d2 Y7 H$ M) l: y! Y2 U) I
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则