Как преобразовать строку в имя столбца? - PullRequest
0 голосов
/ 11 января 2019

У меня есть два решения для выбора некоторых данных из таблицы.

РЕШЕНИЕ 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 голосов
/ 15 января 2019

Используйте cast вместо convert. Попробуйте это с помощью всей динамической переменной set.

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

...