如何在where子句中使用表中的动态列名

时间:2018-06-11 18:17:01

标签: sql sql-server sql-server-2008

我正在尝试使用' INFORMATION_SCHEMA.COLUMNS'从表中获取动态列名称。以下是查询。

Select  COLUMN_NAME into #TempTable 
  from INFORMATION_SCHEMA.COLUMNS 
  where TABLE_NAME = 'MyTable'

结果:

COLUMN_NAME
Person_ID
Person_Name
Person_Address

想做:

Select * from MyTable where Person_ID = 1

从第一个查询到第二个查询使用Person_ID的方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用动态SQL通过EXEC命令执行此操作。

根据您从第一个查询获得的动态列名称为您的查询构建VARCHAR字符串,然后在您创建的字符串上EXEC

您没有提供足够的信息来确定您在WHERE子句中需要哪些列,或者您如何确定哪些列,但动态SQL似乎就是您需要的。

答案 1 :(得分:1)

如果你想做这样的事情

select * from [table] where [col] =@param

然后你可以使用如下的查询

   declare @query nvarchar(max)
    select 
      @query='select * from '+t.name + 
            ' where '+c.name + ' ='+
            case 
              when c.name ='Person_ID' then '1'
              when c.name ='Someother_ID' then '10'
              else c.name
            end

    from sys.tables t join sys.columns c 
    on c.object_id=t.object_id
    and t.name ='MyTable'
    exec(  @query)