如何将字符串转换为列名?

时间:2019-01-11 10:30:57

标签: sql-server-2008 select stored-procedures dynamic-sql

我有两种解决方案可以从表中选择一些数据。

解决方案1 ​​

SELECT [ID]
      ,[SPAU10_EA]
      ,[SPAU10_EQ]
      ,[SPAU10_ore1]
      ,[SPAU10_nivel]
      ,[DateTime]
  FROM [dbo].[TblSPAU10]

解决方案2

我有一个存储过程,该存储过程的参数返回与上述查询相同的结果。 SP的查询就像:

 ALTER PROCEDURE [dbo].[PS_SpauOPompa]

@DataStart datetime,
@DataStop datetime,
@val int
AS
BEGIN
SET NOCOUNT ON;

declare @sql NVARCHAR(max)
declare @col1 varchar (25) 
declare @col2 varchar(25)
declare @col3 varchar (25)  
declare @col4 varchar (25)  
declare @col5 varchar (25)  
declare @col6 varchar (25)  

set @col1='ID'
set @col2='SPAU'+CONVERT(VARCHAR, @val)+'_EA' 
set @col3='SPAU'+CONVERT(VARCHAR, @val)+'_EQ'
set @col4='SPAU'+CONVERT(VARCHAR, @val)+'_ore1'
set @col5='SPAU'+CONVERT(VARCHAR, @val)+'_nivel'
set @col6='DateTime'

set @sql= 'select [ID], ' + @col2 + ',' + @col3 + ',' + @col4 + ',' + @col5 + ',' + @col6 + ' FROM [DBRap].[dbo].[TblSPAU'+CONVERT(VARCHAR, @val)+ '] WHERE DateTime between '''+CONVERT(VARCHAR(25), @DataStart,121)+ ''' and '''+CONVERT(VARCHAR(25), @DataStop,121)+''';'

print @sql;


EXEC sp_executesql  
    @sql, 
    N'@DataStart datetime, @DataStop datetime, @val int',  
    @DataStart, @DataStop, @val;
END
--execute [PS_SpauOPompa] '2018-12-13 15:58:46.940', '2018-12-21 10:51:10.713', 10

我想将两种解决方案结合起来,这意味着可以使用@sql字符串代替第一个解决方案中的选择查询。我现在面临的问题是:如何将varchar变量转换为[column_name]

我在sp中尝试失败,如下所示:

SELECT @col1
      ,@col2
      ,@col3
      ,@col4
      ,@col5
      ,@col6
  FROM [dbo].[TblSPAU10]

1 个答案:

答案 0 :(得分:0)

使用cast代替convert。尝试使用所有动态变量set命令。

set @col2='SPAU'+cast(@val as varchar)+'_EA'