我正在使用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中指定列和行中的值。
答案 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组合中考虑到这一点。