2009-12-10 4 views
1

Im faire un logiciel de gym. J'ai un signin signout system.when les membres se connectent à cette donnée est mis dans un tableau en laissant le colomn vide de la sortie. alors quand le membre se déconnecte, la cellule de sortie est mise à jour. mais si le membre est connecté deux fois, je ne veux pas que le temps de sigout de la première fois soit changé. Je veux seulement que la cellule null soit mise à jour ou que le temps de connexion soit max. J'ai la procédure stockée suivante sans erreurs, mais en cours d'exécution nothin arrive à la cellule de signalisation!Mise à jour d'une cellule null - cette procédure stockée ne fonctionne pas - pourquoi?

ALTER proc [dbo].[updateSignOutMem] 
@ID nvarchar(50), @signOut nvarchar(50),@date nvarchar(50) 
as 
update [DateTable] 
set SignOut = @signOut 

where ID = @ID AND [Date] = @date and SignOut = null ; 

Répondre

3

Solution: Remplacer SignOut = null avec SignOut IS NULL. Pourquoi Pourquoi : Les comparaisons avec NULL retournent toujours NULL et une clause WHERE qui évalue à NULL est traitée comme FALSE. Par exemple SELECT * FROM myTable WHERE NULL = NULL retournera zéro enregistrements plutôt que la table entière.

Explication: Une valeur NULL est une valeur "inconnue", donc le résultat de la comparaison de deux valeurs inconnues est également inconnu. Une description de cette logique à trois valeurs (vrai, faux, inconnu) peut be found on Wikipedia.


PS: SQL Server fournit much more data types que juste nvarchar (50). Utilise les! :-)

1

Essayez d'écrire

SignOut IS null 
Questions connexes