/ / SQL सर्वर में एक Xml फ़ील्ड से कई आइटम मर्ज कैसे करें - xml, sql-server-2008

SQL सर्वर - xml, sql-server-2008 में Xml फ़ील्ड से एकाधिक आइटम्स को मर्ज कैसे करें

मैं अपने डेटाबेस में मौजूद कुछ xml डेटा के साथ काम करने की कोशिश कर रहा हूं।

प्रारंभिक बिंदु इस मोटे रूपरेखा के साथ एक तालिका है:

CREATE TABLE MyTable
(
ID INT NOT NULL IDENTITY(1,1),
...,
FKSiteID INT NOT NULL REFERENCES ...,
...,
Keywords XML(DOCUMENT info.Keywords) NULL
)

एक सामान्य xml स्निपेट हो सकता है:

<keywords xmlns="http://www.educations.com/Info/Keywords">
<keyword>keyword 1</keyword>
<keyword>keyword 2</keyword>
<keyword>keyword 3</keyword>
<keyword>keyword 4</keyword>
<keyword>keyword 5</keyword>
</keywords>

अंत में मैं क्या हासिल करना चाहता हूं, यह एक ऐसा विचार है जो FKSiteID के मूल्य से एक ही स्कीमा के बाद एक एकल xml दस्तावेज़ में समूहीकृत सभी कीवर्ड दिखा रहा है।

एक मध्य चरण के रूप में मैं सभी खोजशब्दों को निकालने की कोशिश कर रहा था, लेकिन मैंने इसे टेबल फ़ंक्शन का उपयोग किए बिना और तालिका में इसे लागू करने का प्रबंधन नहीं किया।

कोई और संकेत?

उत्तर:

जवाब के लिए 2 № 1

दस्तावेजों को विलय करना उचित है, हालांकि आप "करेंगे।"एक नामस्थान बग के अधीन हो / xquery में सुविधा। ऐसा लगता है कि सभी नोड स्तरों पर XML कैस्केड के लिए उपयोग किए जाने वाले नामस्थान। यह वैध XML बनाता है, लेकिन यह पठनीय और पूरी तरह से अनावश्यक नहीं है। अधिक यहाँ

उम्मीद है कि यह वही है जो आप के लिए देख रहे हैं:

declare @MyTable table (
ID INT NOT NULL IDENTITY(1,1),
FKSiteID INT NOT NULL,
Keywords XML NULL
)

insert into @MyTable (FKSiteID, Keywords)
values  (1, "<keywords xmlns="http://www.educations.com/Info/Keywords">
<keyword>keyword 1</keyword>
<keyword>keyword 2</keyword>
<keyword>keyword 3</keyword>
<keyword>keyword 4</keyword>
<keyword>keyword 5</keyword>
</keywords>"
),
(1, "<keywords xmlns="http://www.educations.com/Info/Keywords">
<keyword>keyword 6</keyword>
<keyword>keyword 7</keyword>
</keywords>"),
(2, "<keywords xmlns="http://www.educations.com/Info/Keywords">
<keyword>keyword 21</keyword>
</keywords>")

-- you probably have lookup table instead of the below cte
;with XMLNAMESPACES("http://www.educations.com/Info/Keywords" AS ns),
c_Sites (FKSiteId)
as  (   select  distinct FKSiteId
from    @MyTable
)
select  FKSiteID,
(   select Keywords.query("ns:keywords/*")
from    @MyTable i
where   i.FKSiteID = O.FKSiteId
for xml path(""), root("keywords"), type
)
from c_Sites o;

जवाब के लिए 0 № 2

थोड़ा बेहतर googling द्वारा मैंने msdn पर गाइड पाया कि समस्या को कैसे हल किया जाए।

यह समस्या का आंशिक समाधान है

WITH XMLNAMESPACES ("http://www.educations.com/Info/Keywords" AS a )
(
SELECT ST.FKSiteID AS SiteID, K.Keywords.value(".","nvarchar(max)") AS Keyword
FROM
info.SearchTexts ST
CROSS APPLY ST.Keywords.nodes("a:keywords/a:keyword") AS K(Keywords)
)

मैं ST.FKSiteID द्वारा समूह बनाने और मूल्यों को एकत्र करने की कोशिश कर रहा था, लेकिन जाहिर है कि xml डेटा के साथ काम करने वाला कोई कुल कार्य नहीं है।

कितनी शर्म की बात है।