我想从表“ 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
答案 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查询的其他信息,请访问: