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

在MS SQL Server数据库中存储未知数据类型,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,有人知道在表中存储未知数据类型的最佳实践是什么吗。 基本上,我需要将bit、smallint、int、real和nvarchar等类型存储在同一个“value”列中,以便.NET应用程序稍后进行解释 我试图实现最好的解决方案,不影响数据库的性能或增长 有什么建议吗 提前谢谢 将其存储为(或)。这将处理所有类型。您必须根据您对数据的了解来确定其长度。在我看来,您只有两个选择: 您的对象必须另存为某种字符串。该字符串可以是原始字符串或XML。如果您将其“序列化”为XML并将其存储在数据库中,您可以再

有人知道在表中存储未知数据类型的最佳实践是什么吗。 基本上,我需要将bit、smallint、int、real和nvarchar等类型存储在同一个“value”列中,以便.NET应用程序稍后进行解释

我试图实现最好的解决方案,不影响数据库的性能或增长

有什么建议吗


提前谢谢

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

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

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

尝试以下方法:

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()。

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

sql_variant就是为了这个目的而设计的,所以您可以使用它,但是请阅读联机书籍条目,以确保它能够满足您的需要


我不知道你说的“未知类型”是什么意思。如果您的意思是一个值正好是有限数量的可能类型中的一个,那么我将使用一个列——强类型——表来表示每个可能的类型,并使用一个“超类”表来告诉您要查找哪个表。

如果您要走EAV路线,我建议您阅读一下为什么这是关系数据库中糟糕的数据结构。如果你真的需要这样做,你可以考虑NoSQL解决方案。谢谢你的建议。但由于数据库增长和转换性能下降,我一直在避免使用varchar(nvarchar)解决方案;如果要在同一列中存储不同的类型,您会使用什么其他类型?String/varchar是唯一可以表示所有其他类型的类型(除了binary或course)。**注意:我刚刚阅读了
sql\u varient
类型,这似乎是一个可行的解决方案,但我想知道.NET将如何反应将该列中的对象强制转换为您想要的类型。事实上,我的.NET解决方案已将该值存储在对象属性中,因此可能不会有太多强制转换。谢谢您的建议。但是,由于数据库增长和转换性能的影响,我一直在避免使用varchar(nvarchar)解决方案。哈,你选择的答案是:“sql_variant”你认为它的性能会更好吗?这个解决方案看起来不错,但是序列化的字符串或Xml不会比基础数据本身大很多(以字节为单位)?@Guilherme,是的,这就是为什么我说
“我想指出,“序列化它”会使数据膨胀”
,但是如果您没有其他方法来确定实际的数据类型,这可能是一种倒退。事实上,这正是我当前的解决方案。但我试图通过使用一个“值”表来增强表交叉和选择查询。如果没有其他选择,这就是它将保持的方式。我不太喜欢varchar解决方案,但我肯定会尝试sql_变体并测试转换性能。如果它是可以接受的,那么它就是这样!谢谢你的建议。