T SQL null variable
J'ai une procédure stockée appelée à partir d'une .aspx.cs page. J'ai un paramètre qui parfois ne peut pas être envoyé lorsque la procédure stockée est appelée. À cause de cela, je suis en train de faire les suivants:
IF @variable is null
BEGIN
...do this...
END
Else
...do that...
Mon problème est dans l'instruction if. Aussi loin que je peux dire quand je utiliser les produits suivants:
if @parameterVariable = null
if @parameterVariable = ''
if @parameterVariable <= 0
Rien ne se passe!? Quand je debug de la procédure stockée dans SSMS, je trouve que (même si le paramètre est vide (pas de sélection de l'utilisateur)) que le curseur va et exécute le code dans le ELSE. Suis-je en train de faire quelque chose de mal?
Merci!
Est
Je suis en utilisant
Vous avez probablement un problème quelque part d'autre, cela fonctionne bien. Voir: sqlfiddle.com/#!3/d41d8/6290
pouvez-vous poster le code de votre procédure stockée?
Toutes ces comparaisons avec
@parameterVariable
fait null
?Je suis en utilisant
Declare @variable
et set @variable = null
Généralement le paramètre doit contenir une valeur. Cependant j'ai trouvé et suis en train de corriger la procédure stockée à gérer lorsque l'utilisateur n'a pas à faire la sélection et le paramètre n'est pas défini.Vous avez probablement un problème quelque part d'autre, cela fonctionne bien. Voir: sqlfiddle.com/#!3/d41d8/6290
pouvez-vous poster le code de votre procédure stockée?
Toutes ces comparaisons avec
NULL
(sauf pour IS NULL
) résultat de la unknown
pas true
ou false
. Lire sur trois estimés de la logique.OriginalL'auteur Computer Guy | 2012-11-16
Vous devez vous connecter pour publier un commentaire.
if @parameterVariable = null
est faux.Changer de
if @parameterVariable IS NULL
.Voici un SQL Violon de le démontrer: http://www.sqlfiddle.com/#!6/6cb42/1
OriginalL'auteur Dominic Goulet
utilisation paramètre facultatif:
((@Param1 IS NULL
est la question précise qui m'a fait besoin de s'occuper de tout le reste de la procédure dans un si d'autre scénario. Je vais vous épargner les détails, merci encore!OriginalL'auteur Coding Duchess
lors du débogage dans des SMS, vous devez cocher la case qui dit "Passer la valeur null". sinon, votre valeur est une chaîne vide ou somesuch.
- Je utiliser le modèle que vous suggérer de tous les temps, et il fonctionne bien pour moi.
Cliquez-droit sur une procédure stockée, et sélectionnez 'Exécuter la procédure Stockée", et remplissez les arguments que vous voulez.
C'est un outil formidable. Merci, encore de dépannage, vous ne savez pas si c'est ce que j'ai pourtant besoin. (yeppers je suis encore noob)
OriginalL'auteur Frank Thomas
je vous suggère de lire cette page => ANSI NULL
fait
if @var = null
n'est pas mauvais, tout dépend de la valeur de ANSI_NULLS 🙂When SET ANSI_NULLS is OFF, the Equals (=) and Not Equal To (<>) comparison operators do not follow the ISO standard. A SELECT statement that uses WHERE column_name = NULL returns the rows that have null values in column_name. A SELECT statement that uses WHERE column_name <> NULL returns the rows that have nonnull values in the column. Also, a SELECT statement that uses WHERE column_name <> XYZ_value returns all rows that are not XYZ_value and that are not NULL.
Je dirais que ce qui qualifie de "mauvais". Mais vraiment, à chacun de leurs propres!si c'est "mal" pourquoi ont-ils mis l'option ANSI_NULLS?
C'est pourquoi j'ai utilisé des guillemets. Je suis en aucune façon faire un jugement moral. Mais je ne pense que l'on devrait utiliser ANSI SQL autant que possible. Juste parce que c'est là ne signifie pas qu'il est "bon".
Cette option revient à Sybase jours. Il est obsolète et que votre lien dit "dans une future version de SQL Server, ANSI_NULLS seront toujours de"
ok 🙂 alors j'avoue que ça doit être "mauvais" sans les guillemets 🙂
OriginalL'auteur fnurglewitz