【问题标题】:MS SQL - Storing DatatypesMS SQL - 存储数据类型
【发布时间】:2012-12-11 07:50:32
【问题描述】:

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

AssessmentTypeSpecificAttributeId int
AssessmentTypeSpecificAttributeName nvarchar(256)
AssessmentTypeSpecificAttributeDataType DATATYPE

有没有办法将数据类型存储为数据...

如果没有办法,那我只好用nvarchar(256)了。

但首先,我想试一试。

【问题讨论】:

    标签: sql sql-server sqldatatypes


    【解决方案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 有一些很大的缺点:它不能存储所有的数据类型,不是所有的工具和库都支持它,它需要在各处进行额外的编码才能将其转换为“真实”数据类型等。

    【讨论】:

    • 很好的答案!谢谢 :) 我想我会手动完成,因为我不知道这将如何处理类型化的数据集。我为数据类型创建了一个表。很高兴知道这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2012-05-13
    • 2023-03-20
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多