这里@userIds 如果 写成101,202,301翻译后的sql的where部分会是:
where userId in('101,202,301');
而不是期待的:
where userId in(101,202,301);前者前后多了引号。
 
在我使用ef.core连接mysql查询时,我这样写,就出现查出来的数据比sql脚本查出来的数据要少几条的情况。
所以这样写,可能可以查出来数据,但数据可能不会完整,而且还会是错误的数据。所以以后不要这样写了。
 
我想起,我们在拼接参数化时,可以这样写,比如 userCode=@search,而不是这样写:
userCode='@search';这种在参数化上加了引号的反而还要出错。
 
在前面最开始,即使我们以为他是数字, 但101,202...这样拼接就是字符串了,
指定的paramter或者默认就是为varchar等字符类型就会在参数前后自动加引号的。根据数据值值推断的默认sqlType类型。
省事的解决办法是,直接不在in后面使用用参数化,直接把值拼接到sql中去,比如 where userId in ({userIds});userids就等于“101,202,303”
 
非要使用参数化,就一个值一个参数的拼接。
@userId1 101 int类型
@userId2 202 int类型
@userId3 303 int类型
sql写法就是:where userId in(@userId1,@userId2,@userId3);
参数化的值多了,网上说超过2000个,就不得行了。
也没试过。但如果值很多,就不用in好点吧。

拼接sql 参数化 where userId in(@userIds)的问题的更多相关文章

  1. 存储过程中拼接sql并且参数化

    ALTER PROCEDURE [dbo].[proc_test] ( ) = ' order by id desc ', @userid int, @stime datetime, @etime d ...

  2. 多条件搜索问题 -sql拼接与参数化查询

    来源:传智播客  免费开发视频. 问题:根据书名或出版社或作者查询书籍信息. using System; using System.Collections.Generic问题; using Syste ...

  3. SQL参数化

    本文来自:caodonglin 一.SQL参数化为什么能防注入? 因为执行计划被重用了,所以可以防SQL注入. 下面有两段SQL     正常SQL: 1 select COUNT(1) from C ...

  4. [转帖] SQL参数化的优点 CopyFrom https://www.cnblogs.com/-lzb/articles/4840671.html

    梦在远方的小猪 感谢原作者...  后面总结的五点感觉挺好的.. 自己之前的知识点一直没有串起来. 转帖记录一下感谢. sql参数化参数化 说来惭愧,工作差不多4年了,直到前些日子被DBA找上门让我优 ...

  5. SQL参数化查询

    参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...

  6. C# 多条件拼接sql

    #region 多条件搜索时,使用List集合来拼接条件(拼接Sql) StringBuilder sql = new StringBuilder("select * from PhoneN ...

  7. 二、sql新增后返回主键|sql 使用 FOR XML PATH实现字符串拼接|sql如果存在就修改不存在就新增

    一.sql新增后返回主键 1,返回自增的主键: INSERT INTO 表名 (字段名1,字段名2,字段名3,…) VALUES (值1,值2,值3,…) SELECT @@IDENTITY 2,返回 ...

  8. 拼接sql是陷阱

    项目临时新增一个功能,此时我们习惯自己拼接一个sql. 更可怕的是,后期用户要求新增查询条件,甚至有上10个查询条件,这时的拼接更头疼,if append append(" status=@ ...

  9. StringBuilder 拼接sql语句比较快

    StringBuilder 拼接sql语句比较快StringBuilder strBuilder = new StringBuilder();strSql += "insert into t ...

  10. 使用表达式避免拼接SQL语句

    在SQL语句编写过程中,无论在存储过程中还是在程序中,有时为了使语句兼容全部情况与某字段的特殊情况,不得不拼接SQL字串 如下表 商品ID 类别ID 1 1 2 1 3 2 4 3 5 3 如果我们要 ...

随机推荐

  1. springboot整合redis之发送手机验证码

    阿里云服务发送手机短信验证码-----(第二篇) 文章概述:springboot整合redis之发送手机验证码注册登录 注:搭建springboot项目可以参考这篇文章: 前言:短信验证码是通过发送验 ...

  2. C# Lock的用法

    当我们使用线程的时候,效率最高的方式当然是异步,即各个线程同时运行,其间不相互依赖和等待.但当不同的线程都需要访问某个资源的时候,就需要同步机制了,也就是说当对同一个资源进行读写的时候,我们要使该资源 ...

  3. js推送网页到扩展屏上--谷歌浏览器

    平时我们推送网页.打开窗口都是用的 window.open,但是谷歌却不支持这种方法,也不是不支持,是可以打开窗口,但是无法将窗口移动到扩展屏上. 后面经过百度,发现了一个支持谷歌推送网页到扩展屏的方 ...

  4. pip提示升级pip版本

    今天在进行pip安装库的时候发现下面出现一段黄色的字体,如下图: 自由翻译: 大概意思就是说我现在安装的pip的版本是 20.0.2,最新版本是 20.1,希望我可以更新到最新的版本,并告诉了我怎么安 ...

  5. 重学c#系列—— 简单编写一个guid [娱乐篇]

    前言 什么是guid? 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.GUID主要用于在拥有多个节点.多台计算机的 ...

  6. 使用OpenMMLab系列的开源库时,常用的脚本合集。

    使用OpenMMLab系列的开源库时,常用的脚本合集. 开源仓库:gy-7/mmlab_scripts 脚本解释: anchor_visiual.py 生成的锚框可视化 aug_test.py 自动数 ...

  7. .NET开源免费的跨平台框架 - MAUI(附学习资料)

    前言 前几天分享了一个.NET MAUI开源免费的UI工具包 - Uranium,然后技术群有不少同学问.NET MAUI是不是免费的?能做什么?今天特意写这篇文章来介绍一下.NET开源.免费(基于M ...

  8. var ,let和const三者之间的区别

    var 声明变量可以被修改,可以被重复声明.有变量提升(写的位置和使用时候的位置不一样). let声明变量可以被修改,,但不能重复声明.如文件中有一个let a = 0;后面就不能在定义let a=* ...

  9. 力扣239(Java)- 滑动窗口最大值(困难)

    题目: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回 滑动窗口中的最大值 . 示 ...

  10. 入门即享受!coolbpf 硬核提升 BPF 开发效率 | 龙蜥技术

    简介: 干货必备!何为享受式开发? 编者按:BPF 技术还在如火如荼的发展着,本文先通过对 BPF 知识的介绍,带领大家入门 BPF,然后介绍 coolbpf 的远程编译(原名 LCC,LibbpfC ...