J'ai une table avec le drapeau 0 et 1.

Veuillez me dire comment mettre à jour Zero à One et One à Zero

DECLARE @a INT, @b INT

SELECT @a = number
FROM zerone
WHERE number = 0

SELECT @b = number
FROM zerone
WHERE number = 1

BEGIN
    IF @a = 0
        UPDATE zerone
        SET number = 1
        WHERE @a = 0
    ELSE IF @b = 1
        UPDATE zerone
        SET number = 0
        WHERE @b = 1
END

Cette requête ne fonctionne pas pour moi.

3
sampath acharya 17 nov. 2017 à 09:45

4 réponses

Meilleure réponse

Utilisez la requête ci-dessous pour mettre à jour 0 vers 1 et 1 vers 0

update zerone set number= 1-number
3
Abdul Rasheed 17 nov. 2017 à 06:50

Comme vous l'avez vu, il y a tellement de façons d'effectuer cette tâche mais dans ce cas, je préférerais @Abdul Rasheed. Nous pouvons également utiliser la fonction logique IIF ci-dessous dans SQLSERVER2012 or above.

UPDATE zerone
SET number = IIF (number = 1, 0, 1)
0
Susang 17 nov. 2017 à 07:16

Vous devez également toujours prendre en compte les valeurs NULL dans les opérations de mise à jour et les filtrer explicitement

UPDATE zerone
SET number= case 
              when 1 then 0
              when 0 then 1
             end
WHERE number in (0,1)

De plus, votre requête ne fonctionnera pas car vous affectez une seule variable avec des lignes de données dans l'instruction select.

SELECT @a = number
FROM zerone
WHERE number = 0

Cela ne fonctionne pas comme prévu et affectera uniquement @a avec la valeur NULL (s'il n'y a pas de lignes) ou avec 0 s'il y a une ligne. S'il y a plusieurs lignes, alors il aura une seule valeur 0

0
DhruvJoshi 17 nov. 2017 à 07:01

Juste ça:

UPDATE zerone
SET number = CASE WHEN number = 1 THEN 0 ELSE 1 END;
1
gotqn 17 nov. 2017 à 06:50
47344800