Вы хотите использовать CASE
выражение некоторого типа.
В SQL Server код будет выглядеть так:
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
WHEN gender = 'W' THEN 'M'
ELSE gender END
Редактировать: Как указано в комментариях (и некоторых других ответах), ELSE не требуется, если вы добавите предложение WHERE в утверждение.
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
WHEN gender = 'W' THEN 'M' END
WHERE gender IN ('M','W')
Это позволяет избежать ненужных обновлений. В любом случае важно помнить, что есть и другие варианты, кроме M & W (например, NULL), и вы не хотите вводить ошибочную информацию. Например:
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
ELSE 'M' END
Это заменит все NULL (или другие возможные полы) на «M», что будет неверно.
Пара других вариантов будет
/*Simple form of CASE rather than Searched form*/
UPDATE TableName
SET gender = CASE gender
WHEN 'M' THEN 'W'
WHEN 'W' THEN 'M'
END
WHERE gender IN ( 'M', 'W' );
И более кратким
/*For SQL Server 2012+*/
UPDATE TableName
SET gender = IIF(gender = 'M', 'W', 'M')
WHERE gender IN ( 'M', 'W' );