是否可以在 SQL Server 中使用 XQuery 从输出中获得下表
编辑:我的要求发生了变化,考虑我有一个表,其中存储了以下 xml 和 UserID
DECLARE @XML xml
set @XML = '<Security>
<FiscalYear Name="2012">
<Country Id="204">
<State Id="1">
<City Id="10"></City>
</State>
<State Id="2">
<City Id="20"></City>
<City Id="30"></City>
</State>
<State Id ="3"></State>
</Country >
</FiscalYear>
</Security>'
CREATE TABLE #tmp_user
(UserID INT,SecurityXML XML)
INSERT INTO #tmp_user
( UserID, SecurityXML )
VALUES ( 1,
@XML
)
Run Code Online (Sandbox Code Playgroud)
现在我怎样才能得到 ao/p 喜欢
输出:
UserID StateID CityID
1 1 10
1 2 20
1 2 30
1 3 0
Run Code Online (Sandbox Code Playgroud)
有可能实现吗?
我稍微修改了您的 XML,因为它无效。将结束标记更改</Subsidiary>为</Country>.
declare @XML xml
set @XML =
'<Security>
<FiscalYear Name="2012">
<Country Id="204">
<State Id="1">
<City Id="10"></City>
</State>
<State Id="2">
<City Id="20"></City>
<City Id="30"></City>
</State>
<State Id ="3"></State>
</Country>
</FiscalYear>
</Security>'
select S.N.value('@Id', 'int') as StateID,
coalesce(C.N.value('@Id', 'int'), 0) as CityID
from @XML.nodes('/Security/FiscalYear/Country/State') as S(N)
outer apply S.N.nodes('City') as C(N)
Run Code Online (Sandbox Code Playgroud)
使用表格而不是 XML 变量的版本
select T.UserID,
S.N.value('@Id', 'int') as StateID,
coalesce(C.N.value('@Id', 'int'), 0) as CityID
from #tmp_user as T
cross apply T.SecurityXML.nodes('/Security/FiscalYear/Country/State') as S(N)
outer apply S.N.nodes('City') as C(N)
Run Code Online (Sandbox Code Playgroud)