我现在有一个数据库表设置如下(EAV - 商业上的原因是有效的):在SQL Server中使用sql_variant over varchar有什么好处吗?
- 标识 - 一个int(PK)
- 键 - 独特,VARCHAR(15)
- 价值 - VARCHAR( 1000)
这允许我将混合值作为键/值对添加到我的数据库中。例如:
1 | 'Some Text' | 'Hello World'
2 | 'Some Number' | '123456'
etc.
在我的C#代码,我用ADO.Net使用reader.GetString(2);
检索值作为一个字符串,然后让我的代码的其他地方将其转换为所需,例如... Int32.ParseInt(myObj.Value);
。我正在考虑通过将值列更改为sql_variant
数据类型来增强我的表格,但我不知道这会有什么好处?基本上,有我的值列是sql_variant
vs varchar(1000)
?
更清楚,我读的地方,SQL_VARIANT被返回的数据类型为nvarchar(4000)返回给客户端进行调用(哎哟)!但是,在返回之前我不能将它转换成它的类型吗?显然,我的代码必须进行调整,以将值存储为对象而不是字符串值。我想,在我目前的情况下,使用sql_variant
与其他类型的优点/缺点是什么?哦,值得一提的是,我计划存储的日期时间,字符串和数值类型(int,decimal等)在value列中;我不打算存储和blob或图像等
As [Aaron Bertrand在他的*糟糕的习惯中提到踢 - 使用错误的数据类型*](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to -kick-using-the-wrong-data-type.aspx):*全部使用SQL_VARIANT * - 它不是**一个好主意。不要使用它。你没有得到任何好处 - 但有很多缺点... –
除了声明sql_variant是坏的,你是否声明varchar(1000)是在我确切的情况下去的方式? –
您如何看待使用sql_variant会增强您的表格? –