Во-первых, в SQL Server ваш код не будет генерировать эту ошибку.
Этот код:
Declare @Panels as varchar;
Declare @Readers as varchar;
Set @Panels = ('28,39,30,31,32')
Set @Readers = ('1,2,3,4,5,6')
присваивает значения '2'
и '1'
переменным соответственно. Почему? Поскольку при объявлении строки вам нужна длина .
Во-вторых, строки - это строки, и они сравниваются во всей их полноте. Этот код:
MACHINE = @Panels
говорит: «Я сравниваю целое число со строкой. Они не одного типа, поэтому я бы лучше преобразовал. Позвольте мне проверить. О, правила говорят, чтобы преобразовать строкув целое число. Ой, не могу этого сделать. ОШИБКА! ".
Вы, похоже, хотите разбить строку. Вы бы сделали это следующим образом:
MACHINE IN (SELECT * FROM SPLIT(@Panels, ',') s)
Это все еще имеет неявное преобразование типов, но обычно это будет работать. В производственном коде я был бы более педантичным:
MACHINE IN (SELECT TRY_CONVERT(INT, VALUE) FROM SPLIT(@Panels, ',') s)