如何选择一个字段值,以及字段的类型和大小?

时间:2014-09-20 21:36:32

标签: sql-server sql-server-2008

我想从表“ bfEvent ”中读取一个字段以及相关的列名数据类型,以及所述字段的最大长度。字段名称将不知道(传入)并且可以是任何数据类型。

以下是我正在尝试做的事情,虽然它当然不起作用。

有什么想法吗?

- VARS ......
声明@Field varchar(50)
声明@EventID int

- 价值已通过存储的PROC ...
设置@Field ='截止日期'
设置@EventID = 16

-- WHAT THE PROC SHOULD DO...
   select isc.Column_Name
        , isc.Data_Type
        , isc.Character_Maximum_Length
        , isc.Ordinal_Position
        , evt.@Field as Value        ***here is the problem***
   from INFORMATION_SCHEMA.COLUMNS isc
   where isc.Table_Name = 'bfEvent'
     and isc.Column_Name = @Field
     and isc.Column_Name = evt.@Field  ***and here***
     and evt.EventID = @EventID

表bfEvent看起来像:

EventID   int
EventName varchar(50)
EventDate datetime
Deadline  datetime
SomeText  text
BoolFld   bit

1 个答案:

答案 0 :(得分:1)

如果需要从表中接收数据,则需要指向表。您尝试查询元数据表。在那里,您可以接收所需的元数据,但不能接收数据。

在这两种情况下,都希望事先获取信息并链接到结果集。

以下查询将执行所需的操作:

declare @sql nvarchar(max);

set @sql = 'select metadata.*, data.Value
from
(
    select Value = ' + @Field + ' from bfEvent where EventID = @id
) data,
(
    select
      isc.Column_Name
    , isc.Data_Type
    , isc.Character_Maximum_Length
    , isc.Ordinal_Position
    from INFORMATION_SCHEMA.COLUMNS isc
    where table_name =''bfEvent''
    and column_name = ''' + @Field + '''
) metadata
';
exec sp_executesql @sql, N'@ID int', @ID = @EventID;

结果将采用以下格式:

Column_Name Data_Type   Character_Maximum_Length    Ordinal_Position    Value

有关动态SQL查询的其他信息,请访问: