存储过程中拼接sql并且参数化
ALTER PROCEDURE [dbo].[proc_test]
(
@orderby nvarchar(100) = ' order by id desc ',
@userid int,
@stime datetime,
@etime datetime
)
AS
BEGIN
DECLARE @strWhere nvarchar(1000)=''; --where条件
DECLARE @execsql nvarchar(1000); -- 主语句
DECLARE @param nvarchar(1000); -- 参数 -------拼接where条件---------------------------------------------------------------------
if(@userid>0)
begin
SET @strWhere += ' and [userid] = @userid '
end
--'1753/1/1 0:00:00'为时间传过来的默认值,表示无此筛选条件
if(@stime <> '' and @stime>'1753/1/1 0:00:00')
begin
SET @strWhere += ' and [time] >= @stime '
end
--'1753/1/1 0:00:00'为时间传过来的默认值,表示无此筛选条件
if(@etime <> '' and @etime>'1753/1/1 0:00:00')
begin
SET @strWhere += ' and [time] <= @etime '
end
------拼接where条件 end--------------------------------------------------------------------- --查询sql
set @execsql = ' SELECT TOP 1000 [id] ,[time] FROM [tradeinfo] WHERE 1 = 1 '
+ @strWhere +@orderby; --参数化处理
set @param =N'@userid int,@stime datetime,@etime datetime';
EXEC sys.sp_executesql @execsql ,@param,
@userid=@userid,
@stime =@stime,
@etime =@etime END
c#调用如下:
SqlParameter[] parameters =
{
new SqlParameter("@orderby", SqlDbType.VarChar, ),
new SqlParameter("@userid", SqlDbType.Int,),
new SqlParameter("@stime", SqlDbType.DateTime,),
new SqlParameter("@etime", SqlDbType.DateTime,)
}; parameters[].Value = " order by id desc ";
parameters[].Value = ;
parameters[].Value = SqlDateTime.MinValue.Value;//默认最小值:1753/1/1 0:00:00
parameters[].Value = SqlDateTime.MinValue.Value;//默认最小值:1753/1/1 0:00:00 var ds = ExecuteNonQuery(CommandType.StoredProcedure, "proc_test", parameters);
上面的存储过程做了参数化处理,可以避免sql注入,相比直接拼接(SET @strWhere += ' and [userid] = ' +convert(varchar,@userid),然后用EXEC()方法执行),更高效、更安全,当然维护起来有点麻烦,还有一点排序的参数@orderby好像没法参数化,以后有更好的方法再更新此文。
存储过程中拼接sql并且参数化的更多相关文章
- 存储过程中拼接SQL语句
很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANS ...
- 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数.该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件. begin DECLA ...
- 存储过程中拼接sql的示例
create or replace package body CRF_CMS_DOCTOR_PKG is --根据医院查询医生PROCEDURE P_HOSPITALBYDOCTOR_LIST ( v ...
- sqlserver 存储过程中拼接sql语句 动态执行
ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @maxNumberRows INT, @schoolId INT, @grad ...
- 解决存储过程中拼接的SQL字符串超长导致sql语句被截取的问题
今天遇到了一个奇葩的问题:存储过程中的sql字符串拼接的太长,超出了分页存储过程执行sql参数的nvarchar(4000)的长度. 没办法,只能修改自己的存储过程,因为分页存储过程是不能动的. 开始 ...
- MSSQL存储过程实现拼接sql的注意点
这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改.由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面. 这里就出现了一个问题,我花费 ...
- mysql 存储过程动态拼接sql并执行赋值
)) BEGIN ## 定义变量 ,) ; ## @表示全局变量 相当于php $ ## 拼接赋值 INTO 必须要用全局变量不然语句会报错 SET @strsql = CONCAT('SELECT ...
- SQL Server数据库存储过程中拼接字符串注意的问题
在SQL Server数据库中书写复杂的存储过程时,一般的做法是拼接字符串,最后使用EXEC sp_executesql '拼接的字符串' 查询出结果. 先看一段代码: -- ============ ...
- Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量
请看黄色部分 --区县指标 THEN TVALUE_SQL := 'SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END ...
随机推荐
- ssh反向代理
文章链接:https://www.cnblogs.com/kwongtai/p/6903420.html 前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后 ...
- linux日志过滤某时间段的日志
sed -n '/2019-01-10 16:00*/,/2019-01-10 18:48*/p' nohup.out > 111.log
- Flask开发微电影网站(十)
1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = ...
- shell生成rsync同步脚本
test #!/bin/bash # # Rsync Install Script # Last Updated # ##### modify by Jinayf ##### ######手动修改以下 ...
- 论文阅读笔记四十:Deformable ConvNets v2: More Deformable, Better Results(CVPR2018)
论文源址:https://arxiv.org/abs/1811.11168 摘要 可变形卷积的一个亮点是对于不同几何变化的物体具有适应性.但也存在一些问题,虽然相比传统的卷积网络,其神经网络的空间形状 ...
- C# .Net String字符串效率提高-字符串拼接
字符串操作是编程中非常频繁的操作,特别是在拼接字符串的时候.下面来说说字符串拼接的效率提升. 1. 减少装箱 值类型与引用类型之间的转换存在装箱与拆箱操作:将值类型转换成引用类型的操作叫装箱,将引用类 ...
- 记一次Mysql魔鬼实训
1.查看某个Mysql数据库当前使用的字符集 show create database [库名称] 2.查看当前书库版本信息 #mysql -V MariaDB [(none)]> use my ...
- web中cookie的使用
一:cookie在浏览器中什么地方查找写入成功 二:如何用js写 function addCookie(name,value,expireHours){ var cookieString=name+& ...
- git操作笔记《二》:github更新缓慢问题的解决办法
从GitHub上拉取代码速度十分之慢,百度了一下,说是github的某些域名的dns解析被污染了. 解决方法: 方案一:可以花钱购买VPN服务,但是这对于学生党来说是不划算的. vpn 方案二:绕过d ...
- SpringBoot使用Nacos服务发现
本文介绍SpringBoot应用使用Nacos服务发现. 上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现. 1.Eureka闭源 相 ...