次の列を持つテーブルを作成したい
AssessmentTypeSpecificAttributeId int
AssessmentTypeSpecificAttributeName nvarchar(256)
AssessmentTypeSpecificAttributeDataType DATATYPE
データ型をデータとして保存する方法はありますか...
仕方がない場合は、nvarchar(256) を使用する必要があります。
でも、まずはやってみようと思います。
次の列を持つテーブルを作成したい
AssessmentTypeSpecificAttributeId int
AssessmentTypeSpecificAttributeName nvarchar(256)
AssessmentTypeSpecificAttributeDataType DATATYPE
データ型をデータとして保存する方法はありますか...
仕方がない場合は、nvarchar(256) を使用する必要があります。
でも、まずはやってみようと思います。
あなたの属性の実際の値はどこにありますか? 現在のテーブルで使用できるのは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
、いくつかの大きな欠点があります。すべてのデータ型を保存できない、すべてのツールやライブラリでサポートされていない、「実際の」データ型に変換するためにあらゆる場所で追加のコーディングが必要になるなどです。