0

我想创建一个包含以下列的表

AssessmentTypeSpecificAttributeId int
AssessmentTypeSpecificAttributeName nvarchar(256)
AssessmentTypeSpecificAttributeDataType DATATYPE

有什么方法可以将数据类型存储为数据...

如果没有办法,我将不得不使用 nvarchar(256) 。

但首先,我想试一试。

4

1 回答 1

1

您的属性的实际值在哪里?您可以在当前表中使用的唯一内容是NVARCHAR因为“datetime”不是有效值datetime,“int”不是有效值int等。

假设同一个表包含属性的值,那么另一种方法是使用sql_variant

drop table #t
go

create table #t (
    AttrID int primary key,
    AttrName nvarchar(256) not null,
    AttrValue sql_variant not null,
    AttrDataType as sql_variant_property(AttrValue, 'BaseType')
)
go

insert into #t (AttrID, AttrName, AttrValue) select 1, N'Test integer', cast(1 as int)
insert into #t (AttrID, AttrName, AttrValue) select 2, N'Test datetime', getdate()
insert into #t (AttrID, AttrName, AttrValue) select 3, N'Test decimal', cast(1.0 as decimal(2,1))
go

select * from #t

但是sql_variant有一些很大的缺点:它不能存储所有数据类型,不是所有工具和库都支持它,它需要在任何地方进行额外的编码才能将其转换为“真实”数据类型等。

于 2012-12-11T17:55:12.837 回答