我想创建一个包含以下列的表
AssessmentTypeSpecificAttributeId int
AssessmentTypeSpecificAttributeName nvarchar(256)
AssessmentTypeSpecificAttributeDataType DATATYPE
有没有办法将数据类型存储为数据......
如果没办法,我将不得不使用nvarchar(256)。
但首先,我想尝试一下。
答案 0 :(得分: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
有一些很大的缺点:它不能存储所有数据类型,它不受所有工具和库的支持,它需要在任何地方进行额外编码才能将其转换为“真实”数据类型等。 / p>