我有两种解决方案可以从表中选择一些数据。
解决方案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]
答案 0 :(得分:0)
使用cast
代替convert
。尝试使用所有动态变量set
命令。
set @col2='SPAU'+cast(@val as varchar)+'_EA'