博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态执行SQL语句
阅读量:5039 次
发布时间:2019-06-12

本文共 3487 字,大约阅读时间需要 11 分钟。

在实际制作过程中,需要动态的拼接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 +"''"+,需要注意的是,这段代码前面不能用@符号进行转义,否则会将双层单引号精简成单层单引号,这样,就可以正确执行了。

 

转载于:https://www.cnblogs.com/scy251147/p/3411075.html

你可能感兴趣的文章
C# 启动进程和杀死进程
查看>>
tcp实现交互
查看>>
IIS的各种身份验证详细测试
查看>>
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>
Linux常用命令总结
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>