随笔 - 394  文章 - 0  评论 - 946  阅读 - 143万 

在实际制作过程中,需要动态的拼接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 null
order by a.P_data7 desc'
exec sp_executesql @SQL

 

上面的变量,可以通过'+@columnName+'来进行处理,而数字类型的直接写成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 +"''"+,需要注意的是,这段代码前面不能用@符号进行转义,否则会将双层单引号精简成单层单引号,这样,就可以正确执行了。

 

posted on   程序诗人  阅读(1121)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2010-11-06 Linq 参考资料
点击右上角即可分享
微信分享提示