【问题标题】:How to select one field value, along with the field's type and size?如何选择一个字段值,以及字段的类型和大小?
【发布时间】:2014-09-20 21:36:32
【问题描述】:

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

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

有什么想法吗?

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

-- 传递到存储过程中的值...
设置@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 如下所示:

事件ID int 事件名称 varchar(50) EventDate 日期时间 截止日期时间 SomeText 文本 BoolFld 位

【问题讨论】:

标签: sql-server sql-server-2008


【解决方案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 查询的其他信息:

【讨论】:

    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多