2010-02-19 89 views
4

我正在開發使用SQL Server 2008(基於服務的數據庫)的聯繫人管理器應用程序。大多數聯繫人都有幾個電子郵件或幾個電話號碼。那麼有沒有辦法將數組作爲數據類型存儲在SQL Server中?還是有人有這樣的替代方法?在SQL Server 2008中存儲數組

+3

什麼這讓與WPF呢? – 2010-02-21 14:23:50

回答

12

您需要創建單獨的表格,每個聯繫號碼或電子郵件地址都有一行。

CREATE TABLE Contacts (contactId int, name varchar(128), etc, etc 
CREATE TABLE ContactEmail (contactId int, emailAddress varchar(128), etc 
CREATE TABLE ContactPhone (contactId int, phoneNumber varchar(128), etc 

這將允許你修改單個號碼/電子郵件,刪除它們,將它們添加等,而不需要外部程序來解壓的數組。

但是,如果你真的想保存它規格化,你可以在陣列轉換成分隔字符串。 。在每個電子郵件地址之間加上一個分隔符(用適當的魔術來確保一個地址不包含分隔符),然後在返回時將其分開。

+0

分號適用於電子郵件分隔符。事實上,一些庫自動支持分號分隔的地址。 – 2012-11-07 02:33:18

3

不,SQL中沒有數組類型。

您應該創建一個PHONENUMBERS表和存儲每行使用一個電話號碼,並使用外鍵(稱爲例如,PERSON_ID)來指代人表。

2

您可以使用的另一個選項是將聯繫信息作爲XML文檔存儲在表中的XML類型字段中。如果我不想根據聯繫信息的某些部分搜索人員,我只會這樣做。

例如,如果你認爲你可能有興趣在尋找所有的聯繫人誰擁有的電話號碼與一個特定的區域代碼,那麼你將要做出一個單獨的表,並涉及它,而不是將其存儲這樣的。

我知道你實際上可以在SQL Server 2008中查詢XML,但這實際上取決於你在聯繫人列表中有多少條記錄,因爲在很多數據上解析所有的XML會比較慢有獨立的桌子。

+0

我使用XML列很好 - 他們*可以*是一個選項。然而,我的主要建議是,如果要在XML-as-an-entity之外查詢或修改數據,然後使用DRI將其提升到列。 – user2864740 2014-02-18 22:30:44

0

您可以使用表變量,用這個你應該使用一個DDL創建表,但你需要首先,在(@)寫。有了這個,你有一個數組....但是你不能將它存儲在一張桌子上,因爲一張桌子是一個數組。我真的需要在表內部有一個數據結構,你應該使用一個XML。據我所知,因爲SQL Server 2000有幾個功能可以使用XML。

或許,如果你能告訴我你的理由更多的細節做到這一點...我可以給你回更多的想法!

我希望我的answear可以幫助你

相關問題