2010-11-22 5 views
4

Comment puis-je définir toutes les valeurs 0 sur NULL dans une table SQL?Définir toutes les valeurs 0 sur NULL

Merci d'avance.

+3

Alors, c'est quoi? Définir la valeur NULL à 0 ou définir les valeurs 0 à NULL? –

+3

Titre et le corps sont des questions opposées. – Jamie

Répondre

13
update table set col = null where col = 0 
+0

ce n'est pas utilisable parce que si j'ai plus de 30 colonnes par exemple, que puis-je faire? Suis-je écrire tout le nom des colonnes? – Nuisance

+1

@Nuisance si vous avez besoin de mettre à jour 30 colonnes à zéro, quand elles sont nulles, vous devrez écrire le code comme indiqué ci-dessus. Pourquoi n'est-ce pas utilisable? – NimChimpsky

3
UPDATE MYTABLE SET MYCOLUMN = NULL WHERE MYCOLUMN = 0 

Mais voulez-vous dire dans toutes les colonnes? Ce sera plus de travail et mieux vous suffit de créer des déclarations distinctes pour chaque colonne. Il est également possible de lire le schéma et de générer un SQL dans une procédure stockée et EXEC, mais je ne recommande pas car j'imagine que c'est un travail ponctuel et si vous le faites plus souvent, quelque chose avec le design est faux.

+0

oui je veux dire pour toutes les colonnes .. !! – Marshal

2
UPDATE MyTable 
SET Col1 = NULLIF(Col1, 0), 
    Col2 = NULLIF(Col2, 0), 
    Col3 = NULLIF(Col3, 0) 
WHERE (Col1 = 0 
    OR Col2 = 0 
    OR Col3 = 0) 
1

S'il s'agit d'un travail ponctuel, vous pouvez toujours récupérer la sortie de l'instruction suivante et l'exécuter.

SELECT 'UPDATE ' 
     + OBJECT_NAME(OBJECT_ID) 
     + ' SET ' 
     + sc.name 
     + ' = NULL WHERE ' 
     + sc.name 
     + ' = 0'   
FROM sys.columns sc 
     INNER JOIN sys.types st ON st.system_type_id = sc.system_type_id 
WHERE st.name IN ('bigint', 'int', 'smallint')   
     AND OBJECT_NAME(OBJECT_ID) = 'YourTable' 
Questions connexes