2014-09-20 60 views
0

我想从表“bfEvent”与相关列名数据类型陪读一个字段,并最大长度的说场。字段名称不会被知道(被传入),并且可以是任何数据类型。如何选择一个字段值,以及字段的类型和大小?

下面是我想要做的,虽然它当然不起作用。

任何想法?

- VARS ...
申报@Field VARCHAR(50)
声明@EventID INT

- 传递到存储过程VALUES ...
组@Field =“截止日期'
组@EventID = 16

-- WHAT THE PROC SHOULD DO... 
    select isc.Column_Name 
     , isc.Data_Type 
     , isc.Character_Maximum_Length 
     , isc.Ordinal_Position 
     , [email protected] 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 = [email protected] ***and here*** 
    and evt.EventID = @EventID 

表bfEvent样子:

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

+0

你见过[this SO Answer](http://stackoverflow.com/a/8454706/772086)吗? – Mike 2014-09-21 01:13:18

回答

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查询的其他信息可以在这里找到:

相关问题