【问题标题】:How to convert string to column name?如何将字符串转换为列名?
【发布时间】:2019-06-06 06:25:37
【问题描述】:

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

解决方案 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]

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多