拼接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好點吧。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章