2013-07-09 59 views
0

我需要存儲未知類型(但可以在存儲之前檢查它)(抽象類型)數據。我可以看到存儲它的兩種變體。如何用抽象類型存儲數據?將數據存儲爲sql_variant數據類型是否理智?

檢查數據類型並移至類型特定表。具有許多特定類型不適合抽象。

或將所有內容存儲爲變體。

會有很多數據,我擔心把布爾型數據保存到sql_variant中會導致內存浪費。是這樣嗎?

有沒有其他解決方案適合這種情況?

+2

[不良習慣踢:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong- data-type.aspx) - 請參閱Aaron關於sql_variant的觀點 - 不推薦在任何嚴重系統中使用! –

+0

@marc_s每個類型有多少個表呢? – Cynede

+0

取決於你有什麼樣的數據。這一切都將是'BIT'和'INT'嗎?或者所有二進制數據的大小大於64 KB?您可以針對二進制,非結構化數據,可能是'XML'或'VARCHAR(n)'/'VARCHAR(MAX)'調查'VARBINARY()'而不是'sql_variant'來獲取文本數據 –

回答

1

很難從你的問題中確定正確的答案。

你期待什麼樣的數據類型,你打算怎麼處理這些類型?

因爲,如果要爲每種類型創建多個表,最終會比使用sql_variant類型在磁盤上產生複雜性和更大的大小。 請記住,當使用sql_variant來表示布爾值時,將僅表示1字節的開銷(用於存儲數據類型種類)+可變長度字節(您可能已經在表中)。 但是,如果您使用該類型的某些複雜的任務關鍵邏輯,並且如果您的數據訪問框架不支持sql_variant,則不應使用sql_variant。