查找列名并在select语句中使用它

时间:2015-07-19 14:49:21

标签: sql-server

我正在使用SQL Server 2012.我想编写一个查询,首先我使用LIKE "%MyName"短语在特定表中查找列名,然后在select语句中使用此列名来查找值表Prąd中的那一列。

我尝试过这样做,使用this主题提示。 到目前为止我写的代码看起来像这样:

SELECT 
    (
    SELECT c.name AS ColName
    FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
    WHERE c.name LIKE 'energia%'
    )   
FROM Prąd
WHERE ID = 
    (
    SELECT MAX(ID) 
    FROM 
    Prąd
    )

我得到的结果只是列名,而不是表Prąd中指定列和行中的值。

2 个答案:

答案 0 :(得分:2)

您需要动态声明。

Declare @sqlCommand varchar(max) 
declare @columnName varchar(250)

Set @columnName = ( SELECT c.name  FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE c.name LIKE 'energia%' )

Set @sqlCommand = ' select ''' +@columnName + ''' FROM Prąd WHERE ID = ( SELECT MAX(ID) FROM Prąd ) '

Exec @sqlCommand

答案 1 :(得分:1)

您需要编写一个动态SQL语句,将找到的列名称连接成一个字符串变量,然后execute。快速搜索将向您展示几种可用的方法。如果部署应用程序以供其他人使用,请确保选择一种防止注入的方法。

另请注意,如果您的列名select可能会返回多个结果 - like过滤器非常可以 - 您需要在动态SQL组合中考虑到这一点。