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 に答える