提前感谢您的帮助!我正在尝试在XML列上编写查询,其设置如下:
<DictionaryOfStringObject>
<Item>
<Key>
<string>Info</string>
</Key>
<Value>
<SerializableDictionaryOfStringObject>
<Item>
<Key>
<string>FirstName</string>
</Key>
<Value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" xmlns:d7p1="http://www.w3.org/2001/XMLSchema-instance" d7p1:type="q1:string">JON</anyType>
</Value>
</Item>
<Item>
<Key>
<string>MiddleName</string>
</Key>
<Value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" xmlns:d7p1="http://www.w3.org/2001/XMLSchema-instance" d7p1:type="q1:string" />
</Value>
</Item>
<Item>
<Key>
<string>LastName</string>
</Key>
<Value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" xmlns:d7p1="http://www.w3.org/2001/XMLSchema-instance" d7p1:type="q1:string">SNOW</anyType>
</Value>
</Item>
<Item>
<Key>
<string>Gender</string>
</Key>
<Value>
<anyType xmlns:q1="http://www.w3.org/2001/XMLSchema" xmlns:d7p1="http://www.w3.org/2001/XMLSchema-instance" d7p1:type="q1:string">Male</anyType>
</Value>
</Item>
我需要在本专栏中提取每个行中的信息。我不是在寻找一个特定的人。我需要从列中为表中的每一行提取此信息。
我理解查询特定人员的单行但是如何开发一个SELECT语句,将在整个表中为每一行提取此信息?
每个人在表中都有一行,我需要一个XML列来开发一个查询,以便针对将为每个人提取信息的表运行。
Row 1 = FirstName1, LastName1, Gender1
Row 2 = FirstName2, LastName2, Gender2
我从来没有为这样的标签写过查询,有人可以协助我为SQL Server 2008
和SQL Server 2010
开发一个Select语句。
我有一些XML经验,但可以使用示例并解释如何实现这一点。
答案 0 :(得分:0)
你可以使用XPATH来实现这个
选择btrim(xpath(&#39; / DictionaryOfStringObject / Item / Value / SerializableDictionaryOfStringObject / item / key / string / text()&#39;,column_name):: text,&#39; {&#34; }&#39;) 从表
尝试它应该工作
答案 1 :(得分:0)
可能的查询:
SELECT
x.value('(Item[Key/string="FirstName"]/Value/anyType)[1]', 'varchar(500)')
as 'FirstName',
x.value('(Item[Key/string="LastName"]/Value/anyType)[1]', 'varchar(500)')
as 'LastName',
x.value('(Item[Key/string="Gender"]/Value/anyType)[1]', 'varchar(500)')
as 'Gender'
FROM MyTable t
OUTER APPLY t.xml.nodes('/*/Item/Value/*') v(x)
<强> SQL Fiddle Demo 强>
简要说明:
基本上,查询对父标记执行OUTER APPLY
,该标记包含要作为列输出的所有信息,在这种情况下,父标记为<SerializableDictionaryOfStringObject>
标记。请注意,我使用*
只是为了避免在xpath中使用冗长的标记名称。
然后在SELECT
子句中,查询只是根据<Item>
子标记过滤Key/string
标记,以确定哪个<Item>
对应哪个列。然后从每个匹配<Item>
返回相应的Value/anyType
子项。
示例输出:
旁注:对于将来的问题,请至少提供格式良好的XML示例和确切的预期查询输出,并将XML作为输入。对于像这样的SQL问题,SQL小提琴将是一个完美的补充,请参阅:Tips for asking a good Structured Query Language (SQL) question