我有一个表,其中包含一个列标题为XML的数据。我需要从该列中提取一个字段,以便可以使用它连接到另一个表。我遇到的麻烦是当我设置XML变量时,因为我需要字段来自很多XML行。到目前为止,这是我的查询:
declare @XML as XML
set @XML = (select [Data] from tbl.api.Session where applicationid
= 25)
select u.n.value('./@username', 'varchar(max)') as username
from @XML.nodes('/ISession/WorkbenchIdentity') as u (n)
任何帮助将不胜感激!让我知道您是否需要其他信息。
XML代码:
<ISession>
<ad xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<adSessionGuid>ba07909a-46d3-4f79-a1b2-df4d267f66d5</adSessionGuid>
</ad>
<client-info xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<client-browser>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1;
WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET
CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)</client-
browser>
<client-host-ip>172.16.108.8</client-host-ip>
<res-width>0</res-width>
<res-height>0</res-height>
</client-info>
<guest xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
<identity xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>c5a4ff78-fb49-4433-a9a1-d58b766100fb</id>
<anonymous>false</anonymous>
<lastAuthenticated>2018-09-15T00:05:48.3436442Z</lastAuthenticated>
<guest>false</guest>
<isTestSession>false</isTestSession>
</identity>
<WorkbenchIdentity xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<id>34193</id>
<userId>c5a4ff78-fb49-4433-a9a1-d58b766100fb</userId>
<userName>kwhittington250</userName>
<lastAuthenticated>2018-09-15T00:05:48.3592653Z</lastAuthenticated>
<storeId>5898</storeId>
答案 0 :(得分:0)
我认为类似的东西应该起作用
select u.n.value('userName[1]','varchar(max)') as username
from tbl.api.Session s
cross apply [Data].nodes('/ISession/WorkbenchIdentity') as u(n)
where applicationid = 25
不过,我认为[Data]
字段必须已经是XML数据类型。如果不是,您可能必须将tbl.api.Session
字段转换为XML的CTE或suquery替换[Data]
答案 1 :(得分:0)
我认为您可以忽略XML变量部分,如果您有多行,则可能会失败并返回错误。您可以直接查询表,并使用它来连接其他表。
Ex(假设“数据”字段为XML数据类型):
string(29) "{"max": 92233720368547758071}"
object(stdClass)#1 (1) {
["max"]=>
float(9.2233720368548E+19)
}
object(stdClass)#1 (1) {
["max"]=>
string(20) "92233720368547758071"
}
string(30) "{"max":"92233720368547758071"}"
string(29) "{"max":9.223372036854776e+19}"