为什么我们主要不使用SQL_VARIANT数据类型,即使它支持所有类型的数据?

tec*_*mad 1 sql sql-server sql-server-2008 sql-server-2008-r2

SQL_VARIANT数据类型可用于同时存储各种数据类型的值,例如数值,字符串和日期值.(唯一不能存储的值类型是TIMESTAMP值.)那么在表中避免这种数据类型的具体原因是什么?

das*_*ght 6

灵活性SQL_VARIANT不是免费的.使用变体字段可以执行的操作存在限制.存储需求也明显增加(您需要将类型与每行中的每个值一起存储)和计算复杂度的增加(您需要在操作之前检查每个值的类型).

但即使在速度和存储不是问题的情况下,您也会获得更多的"维护责任".您的代码的读者会花费额外的时间来理解变体字段中可以存储哪些类型的东西,因为最终您从数据库中读取的值最终会出现在您的代码中,并且您必须准备好处理任何类型的值.

这并不是否认使用的合法案例SQL_VARIANT存在.这些案例相当具体,而且有限.大多数情况下,其中一个要求是您的程序充当进出变量字段的数据的"管道",而无需解释其中的内容.