我正在尝试使用' 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的方法是什么?
答案 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)