Вы действительно, действительно, не хотите зацикливаться в базе данных.
SQL работает в подходе, основанном на множестве - вам следует подумать о работе над набором строк, а не о работе над каждой строкой по отдельности.
Чтение эта статья о RBAR для получения дополнительной информации.
Теперь, если я понимаю ваши требования, вы, вероятно, должны сделать что-то вроде этого:
SELECT [User_ID], CASE WHEN COUNT(DISTINCT Class) = 1 THEN 0 ELSE 1 END As is_Mismatched
FROM Table
GROUP BY [User_ID]
Если вы хотите обновитьтаблицу, вы можете использовать общее табличное выражение с запросом выше, чтобы получить значения, и использовать его для обновления:
;WITH CTE AS
(
SELECT [User_ID], CASE WHEN COUNT(DISTINCT Class) = 1 THEN 0 ELSE 1 END As is_Mismatched
FROM Table
GROUP BY [User_ID]
)
UPDATE t
SET t.is_Mismatched = cte.is_Mismatched
FROM Table As t
JOIN cte ON t.[User_ID] = cte.[User_ID]