我应该使用SQL_Variant数据类型吗?

使用SQL Server 2005与SP4和我正在设计一个数据库表。

这是DDL表

CREATE TABLE CPSync4D.ProjectProfilerOption
(
    ProjectProfilerOptionID     INT  IDENTITY(1,1) CONSTRAINT PK_ProjectProfilerOption_ProjectProfilerOptionID PRIMARY KEY 
   ,ProjectID                   INT  CONSTRAINT FK_ProjectProfilerOption_Project_ProjectID FOREIGN KEY(ProjectID) REFERENCES CPSync4D.Project(ProjectID) ON DELETE CASCADE
   ,ProfilerOptionID            TINYINT CONSTRAINT FK_ProjectProfilerOption_ProfilerOption_ProfilerOptionID  FOREIGN KEY(ProfilerOptionID) REFERENCES CPSync4D.ProfilerOption (ProfilerOptionID) 
   ,ProfilerOptionValue         sql_variant  NOT NULL   

)
Go

profileroptionvalue列可以包含最多30个字符的字符串,整数或十进制值,例如值为“ProfilerValueType”,或12.52或20等(不超过两位小数和整数值小于100)

我应该使用sql_variant还是varchar(30)…?我从来没有使用过sql_variant,不知道在数据库设计方面没有使用任何暗示。

任何陷阱使用sql_variant …与.net代码

10 reasons to explicitly convert SQL Server data types

As a general rule, you should avoid using SQL Server’s sql_variant
data type. Besides being a memory hog, sql_variant is limited:

  • Variants can’t be part of a primary or foreign key. (this doesn’t hold as of SQL Server 2005. See update below)
  • Variants can’t be part of a computed column.
  • Variants won’t work with LIKE in a WHERE clause.
  • OLE DB and ODBC providers automatically convert variants to nvarchar(4000) — ouch!

To avoid problems, always explicitly convert sql_variant data types as
you use them. Use any method you please, just don’t try to work with
an unconverted sql_variant data type.

我以前没有使用sql_variant,但是考虑到这些限制和性能影响,我会先看看替代方案。

以下是我最不喜欢的解决方案

>只需创建三个不同的列。 3不同的数据类型(应该)意味着在客户端和服务器端解释它们的3种不同的方式。
>如果不是选项,请使用VARCHAR列,以便至少使用LIKE语句。
>使用sql_variant数据类型。

编辑Cudo到ta.speot.is

Variants can be part of a primary of foreign key

A unique, primary, or foreign key may include columns of type
sql_variant, but the total length of the data values that make up the
key of a specific row should not be more than the maximum length of an
index. This is 900 bytes

http://stackoverflow.com/questions/9039455/should-i-use-sql-variant-data-type

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:我应该使用SQL_Variant数据类型吗?