是否有人知道在表中存储未知数据类型的最佳做法是什么。 基本上我需要在同一个“值”列中存储bit,smallint,int,real和nvarchar等类型,以供.NET应用程序稍后解释。
我试图找到最好的解决方案,不要损害数据库的性能或增长。
有什么建议吗?
提前致谢!
答案 0 :(得分:11)
Varchar(max)可能是最简单的方法。
sql_variant是为此目的而设计的,因此您可以使用它,但请阅读联机丛书条目以确保它能够执行您想要的操作。
答案 1 :(得分:1)
在我看来,你只有两个选择:
你的对象必须保存为某种字符串。该字符串可以是原始字符串或XML。如果您将其“序列化”为XML并将其存储在数据库中,则可以再次选择nvarchar
或XML
。我会指出“序列化”会使数据膨胀。如果您可以根据您可能同时提取的另一列合理地确定数据类型,那么我建议将其放在一个字符串中。
答案 2 :(得分:1)
我不确定你的'未知类型'是什么意思。如果你的意思是一个值恰好是有限数量的可能类型中的一个,那么我会为每个可能的类型使用单列 - 强类型 - 表,并使用'超类'表来告诉你要查看哪个表。
答案 3 :(得分:0)
答案 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()。