这里@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好点吧。
标签:202,userIds,userId,参数,sql,101,where From: https://www.cnblogs.com/HelloQLQ/p/17636235.html