2011-01-05 3 views

Répondre

2

Vous écririez une requête qui est quelque chose comme ceci:

<cfquery name="queryName" datasource="dsn"> 
    UPDATE tableName SET fieldName = NULL 
    WHERE recordId = <cfqueryparam cfsqltype="cf_sql_integer" value="#recordId#" /> 
</cfquery> 

En outre, il y a une différence entre une chaîne vide et une valeur NULL. La chose à retenir à propos de NULL est qu'il ne correspond à rien d'autre que NULL. Mais cela aussi ne correspond pas à des valeurs non-NULL. Donc, si vous avez trois enregistrements dans votre table:

ID  VALUE 
1  15 
2  NULL 
3  30 

Lorsque vous exécutez cette requête:

SELECT ID from tableName where value != 15 

vous n'obtenir dossier 3. La façon de faire enregistrer que 2 est inclus dans l'ensemble de résultats est de modifier votre requête en tant que tel:

SELECT ID from tableName where coalesce(value,16) != 15 

le but de soudent est de vérifier le premier paramètre pour NULL-ness, et utiliser la valeur du second paramètre au lieu si le premier paramètre est NULL. Dans l'exemple ci-dessus, j'ai mis '16' comme deuxième paramètre, mais vous pouvez utiliser n'importe quelle valeur tant que ce n'est pas la même chose que ce que vous comparez (dans ce cas, 15).

+1

Il existe également un attribut null pour la balise cfqueryparam. Ceci est utile quand la valeur est dynamique et que vous pouvez faire quelque chose comme ceci: set col =

+0

Bon point! J'ai eu des problèmes en utilisant cela dans une clause WHERE (cela ne semble pas fonctionner comme il le devrait dans les versions CF sur lesquelles je l'ai essayé), mais cela fonctionne très bien pour les clauses SET ou VALUES dans les requêtes UPDATE et INSERT (respectivement). Une bonne chose à utiliser, mais assurez-vous de comprendre ce qu'il fait, quand ça marche, et quand ça ne marche pas. =) –

Questions connexes