在MS SQL Server数据库中存储未知数据类型

时间:2010-10-07 14:14:53

标签: sql sql-server sql-server-2008

是否有人知道在表中存储未知数据类型的最佳做法是什么。 基本上我需要在同一个“值”列中存储bit,smallint,int,real和nvarchar等类型,以供.NET应用程序稍后解释。

我试图找到最好的解决方案,不要损害数据库的性能或增长。

有什么建议吗?

提前致谢!

5 个答案:

答案 0 :(得分:11)

Varchar(max)可能是最简单的方法。

sql_variant是为此目的而设计的,因此您可以使用它,但请阅读联机丛书条目以确保它能够执行您想要的操作。

http://msdn.microsoft.com/en-us/library/ms181071.aspx

答案 1 :(得分:1)

在我看来,你只有两个选择:

你的对象必须保存为某种字符串。该字符串可以是原始字符串或XML。如果您将其“序列化”为XML并将其存储在数据库中,则可以再次选择nvarcharXML。我会指出“序列化”会使数据膨胀。如果您可以根据您可能同时提取的另一列合理地确定数据类型,那么我建议将其放在一个字符串中。

答案 2 :(得分:1)

我不确定你的'未知类型'是什么意思。如果你的意思是一个值恰好是有限数量的可能类型中的一个,那么我会为每个可能的类型使用单列 - 强类型 - 表,并使用'超类'表来告诉你要查看哪个表。

答案 3 :(得分:0)

将其存储为varchar(或nvarchar)。这将处理所有类型。您必须根据您对数据的了解来确定制作它的长度。

答案 4 :(得分:0)

试试这个:

YourTableName
...more columns...
ColType char(1)       --B=bit, S=smallint, I=int, R=real, n=nvarchar, you can FK to a table to store these or just check constraint them
Col     nvarchar(x)   --where x is large enought to hold your longest string or other value
...more columns...
<。>在.Net应用中,阅读ColType并将Col列转换为该类型。保存时,SQL Server会将本机数据类型转换为nvarchar()。