最新要闻

广告

手机

好莱坞电影公司向罢工编剧妥协:人工智能和观众数据不再被限制

好莱坞电影公司向罢工编剧妥协:人工智能和观众数据不再被限制

大行评级|大摩:予五矿资源目标价2港元评级“减持”

大行评级|大摩:予五矿资源目标价2港元评级“减持”

家电

拼接sql 参数化 where userId in(@userIds)的问题

来源:博客园


(资料图片仅供参考)

这里@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好点吧。

关键词: