0

只是想知道这是否可能,如果是这样......怎么办?

表(Foos):

Column   Value
Id       int pk autoinc
Type     varchar(50) not null
Name     varchar(50) not null
Value    varchar(50)

当我这样做时,SELECT * FROM Foos我得到以下信息:

Id       Type          Name         Value
-------------------------------------------------
1        int           MaxScore     '100'
2        varchar(50)   Greeting     'hello world'
3        datetime      FollowupDate '01-01-2012'

我希望能够创建一个返回记录(使用 Id)并在返回记录之前将记录转换为适当类型的 SP。我知道我可以轻松地按原样返回记录并使用应用程序将字符串转换为适当的类型......但我想这只是想知道这是否可以扩展知识和探索......沿着行:

SELECT Id, Name, CAST(Value AS [Type]) 
FROM Foos

但是,我得到了错误:

消息 243,级别 16,状态 1,行 1
类型类型不是已定义的系统类型。

4

2 回答 2

1

我确信你可以使用动态 SQL 来做到这一点,但我不认为它会特别优雅。您是否考虑过将值存储为sql_variant

于 2013-02-22T17:38:35.193 回答
0

这样的事情可能会给你你应得的:

declare @Samples as Table ( Id Int Identity, Type VarChar(32), Name VarChar(32), Value VarChar(32) )
insert into @Samples ( Type, Name, Value ) values
  ( 'int',         'MaxScore',     '100' ),
  ( 'varchar(50)', 'Greeting',     'hello world' ),
  ( 'datetime',    'FollowupDate', '01-01-2012' ),
  ( 'money',       'PriceEach',    '99.4' )

select Id, Name, Type, Value, case
  when Type = 'DateTime' then Cast( Convert( DateTime, Value, 104 ) as SQL_Variant )
  when Type = 'Int' then Cast( Cast( Value as Int ) as SQL_Variant )
  when Type = 'Money' then Cast( Cast( Value as Money ) as SQL_Variant )
  when Type like 'VarChar(%)' then Cast( Cast( Value as VarChar(8000) ) as SQL_Variant )
  else NULL end Variant
  from @Samples

VarChar案例应该有额外的代码来解析长度并用于返回SUBSTRING()合适的长度。

愿狗怜悯你的灵魂。

于 2013-02-22T19:01:31.287 回答