在实际制作过程中,需要动态的拼接SQL语句然后执行。具体代码如下:
declare @columnName varchar(20),@tempName varchar(20) select @tempName = P_data5 from tb05 where P_data1='162' if(@tempName='一路温度') select @columnName = 'a.P_data1' else if(@tempName='二路温度') select @columnName = 'a.P_data2' else if(@tempName='三路温度') select @columnName = 'a.P_data3' else if(@tempName='四路温度') select @columnName = 'a.P_data4' else if(@tempName='五路温度') select @columnName = 'a.P_data5' else if(@tempName='六路温度') select @columnName = 'a.P_data6' else if(@tempName='七路温度') select @columnName = 'a.P_data9' else if(@tempName='八路温度') select @columnName = 'a.P_data10'DECLARE @SQL nvarchar(max) =N'select top 1 a.* from TB04 a inner join TB05 b on a.P_data8=b.P_data2 where b.P_data1=162 and CONVERT(CHAR(10), a.P_data7, 120)=''2013-11-05'' and '+@columnName+' <> ''FF.F''and '+@columnName+' is not nullorder by a.P_data7 desc'exec sp_executesql @SQL
上面的变量,可以通过来进行处理,而数字类型的直接写成where b.P_data1=162 即可;但是文本类型的就不能这样写,需要加两层单引号:CONVERT(CHAR(10), a.P_data7, 120)=''2013-11-05'' ,都拼接完毕后,就可以用exec sp_executesql命令来执行。
如果这些SQL语句需要整合到asp.net中,该如何处理里面的变量呢,其实很简单,如下所示:
string sql = @"declare @columnName varchar(20),@tempName varchar(20) select @tempName = P_data5 from tb05 where P_data1=" + id + @" if(@tempName='一路温度') select @columnName = 'a.P_data1' else if(@tempName='二路温度') select @columnName = 'a.P_data2' else if(@tempName='三路温度') select @columnName = 'a.P_data3' else if(@tempName='四路温度') select @columnName = 'a.P_data4' else if(@tempName='五路温度') select @columnName = 'a.P_data5' else if(@tempName='六路温度') select @columnName = 'a.P_data6' else if(@tempName='七路温度') select @columnName = 'a.P_data9' else if(@tempName='八路温度') select @columnName = 'a.P_data10' DECLARE @SQL nvarchar(max) =N' select top 1 a.*,b.P_data5 as P_data51 from TB04 a inner join TB05 b on a.P_data8=b.P_data2 where b.P_data1=" + id+" and CONVERT(CHAR(10), a.P_data7, 120)=''"+datetime +"''"+@" and '+@columnName+' <> ''FF.F'' and '+@columnName+' is not null order by a.P_data7 desc' exec sp_executesql @SQL";
这里需要注意的是,对于Int类型数据来说,我们直接利用双引号即可:where b.P_data1=" + id+" ;但是对于文本数据,我们需要利用双层单引号:
and CONVERT(CHAR(10), a.P_data7, 120)=''"+datetime +"''"+,需要注意的是,这段代码前面不能用@符号进行转义,否则会将双层单引号精简成单层单引号,这样,就可以正确执行了。