有没有人知道如何在表中存储未知数据类型的最佳实践。
基本上我需要在同一“值”列中存储像bit、smallint、int、real和nvarchar这样的类型,以便后来由.NET应用程序进行解释。
我正在尝试实现最佳解决方案,以不影响数据库的性能或增长。
有什么建议吗?
提前感谢!
有没有人知道如何在表中存储未知数据类型的最佳实践。
基本上我需要在同一“值”列中存储像bit、smallint、int、real和nvarchar这样的类型,以便后来由.NET应用程序进行解释。
我正在尝试实现最佳解决方案,以不影响数据库的性能或增长。
有什么建议吗?
提前感谢!
Varchar(max)是实现这个目的最简单的方法。
Sql_variant也是为此设计的,因此您可以使用它,但请阅读Books Online条目以确保它能够实现您想要的功能。
在我看来,你只有两个选择:
你的对象必须保存为某种字符串。该字符串可以是原始字符串或XML格式。如果你将其序列化为XML并存储在数据库中,同样,你可以选择nvarchar
或XML
。我要指出的是,“序列化”会使数据膨胀。如果你可以合理地根据另一个同时提取的列确定数据类型,那么我建议将其作为字符串输入。
我不确定你所说的“未知类型”是什么意思。如果你的意思是一个值恰好是有限数量可能类型中的一个,那么我建议使用单列 -- 强类型 -- 表来表示每个可能的类型,并使用一个“超类”表来告诉你应该在哪个表中查找。
sql_varient
类型,这似乎是一个可行的解决方案,但我想知道在将该列中的对象转换为所需类型时,.NET 会有何反应。 - Brad试试这个:
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...
ColType
并将 Col
列转换为该类型。保存时,SQL Server 将会自动将本地数据类型转换为 nvarchar()。