В первом случае ваше значение @searchKey равно "0001", и это означает, что ваш оператор выглядит как
SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001')
, это работает, потому что это 1 параметр, а внутренняя обработка параметров заключает в себе одинарные кавычки it.
Случай секунд выглядит следующим образом:
SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001,0002')
, но он должен выглядеть следующим образом:
SELECT * FROM gsm00 a INNER JOIN gsd00 b ON a.idnum=b.idnum WHERE b.idnum IN ('0001','0002')
Невозможно неявно проверить из вашего оператора, 1 параметр или несколько параметров, потому что "," может быть частью значения IN-Clause.
Это аналогичный вопрос с решениями, может быть, вы также посмотрите на это:
Как передать sqlparameter в IN ()?