2011-10-20 73 views
2

我做了可行性研究在以下結構與SQL Server 2008存儲數據:這是一種在SQL Server 2008中存儲XML數據的好方法嗎?

-MYTABLE

|ID|RECORDS|BRANCH_OFFICE|MONTH|YEAR 

記錄列具有XML數據類型和它看起來像:

<visits> 
    <visit id="000112233"> 
    <costumer>Mr. One Costumer</costumer> 
    <date>2011-02-10</date> 
    <employee>MAT</employee> 
    </visit> 
    <visit id="000112234"> 
    <costumer>Mr. Another Costumer</costumer> 
    <date>2011-02-12</date> 
    <employee>MAT</employee> 
    </visit> 
    <visit id="000112235"> 
    <costumer>Mr. Some Costumer</costumer> 
    <date>2011-02-12</date> 
    <employee>MAT</employee> 
    </visit> 
    <visit id="000112236"> 
    <costumer>Mr. Some Costumer</costumer> 
    <date>2011-02-15</date> 
    <employee>MAT</employee> 
    </visit> 
</visits> 

我打算用xquery查詢xml列,這是存儲這些數據的好方法嗎?

如果我想要得到2011-10年度發生的訪問列表,添加一個標籤,其中的「日期」標籤和現在的天數之間的差值,它會怎樣?

+0

如果**被** XML,那麼,我就**存儲它作爲** XML .... –

+0

這看起來好像很有條理,表格數據。將它存儲在一張簡單的老式桌子裏。如果您確實需要存儲和查詢(半/非結構化)XML數據,請考慮使用[原生XML數據庫](http://en.wikipedia.org/wiki/XML_database#Native_XML_databases)。 –

+0

是的,我必須將它存儲爲XML,RECORDS列將包含其他類型的XML結構,以及我所要求的xquery,有什麼建議?而SQL SERVER 2008是必要的。 –

回答

2

對你的XML的查詢可能看起來像這樣,我認爲你的結構很好。沒有必要做任何花哨的XML材料來獲取您需要的信息。

declare @T table 
(
    ID int identity primary key, 
    Records xml 
) 

insert into @T values(' 
<visits> 
    <visit id="000112233"> 
    <costumer>Mr. One Costumer</costumer> 
    <date>2011-02-10</date> 
    <employee>MAT</employee> 
    </visit> 
    <visit id="000112234"> 
    <costumer>Mr. Another Costumer</costumer> 
    <date>2011-02-12</date> 
    <employee>MAT</employee> 
    </visit> 
    <visit id="000112235"> 
    <costumer>Mr. Some Costumer</costumer> 
    <date>2011-02-12</date> 
    <employee>MAT</employee> 
    </visit> 
    <visit id="000112236"> 
    <costumer>Mr. Some Costumer</costumer> 
    <date>2011-02-15</date> 
    <employee>MAT</employee> 
    </visit> 
</visits>') 


select T.ID, 
     V.X.value('@id', 'nvarchar(10)') as VisitID, 
     V.X.value('costumer[1]', 'nvarchar(50)') as Costumer, 
     V.X.value('date[1]', 'date') as [Date], 
     V.X.value('employee[1]', 'nvarchar(50)') as Employee 
from @T as T 
    cross apply T.Records.nodes('/visits/visit') as V(X) 

結果:

ID   VisitID Costumer    Date  Employee 
----------- ---------- -------------------- ---------- -------------------- 
1   000112233 Mr. One Costumer  2011-02-10 MAT
1   000112234 Mr. Another Costumer 2011-02-12 MAT
1   000112235 Mr. Some Costumer 2011-02-12 MAT
1   000112236 Mr. Some Costumer 2011-02-15 MAT
相關問題