0
votes

Comment déclarer un paramètre NO NULL dans la procédure stockée de bonne manière?

Je veux écrire une procédure de magasin, qui prend 4 paramètres et un paramètre doit être entré, afin de trouver le bon produit de la mettre à jour à partir de la lagière dans différentes conditions. Je ne sais pas, où est mon erreur. Lorsque j'exécute, je reçois une telle erreur le paramètre '@productname' a été déclarée comme non nulle. Les paramètres non nuls ne sont pas pris en charge avec des modules compilés de manière nativement, à l'exception des fonctions de valorisation de table en ligne. J'apprécie vraiment vos commentaires doucement et gentiment pour m'améliorer. Je n'ai pas pu trouver la bonne réponse en ligne.

Voici mon code: xxx

et c'est la table.

 Ceci est ma table


0 commentaires

3 Réponses :


2
votes

Comme si l'erreur vous indique, SQL Server ne prend pas en charge les paramètres NON NULL , sauf si vous utilisez des modules compilés de manière native.

Aussi, dans votre requête, @productname! = null est jamais va être vrai. rien est égal à, ou non égal à null , y compris null null . null = null et null! = Null retourne "inconnu", lequel n'est pas faux, c'est plus important non vrai (ce qui est Ce que nous testons dans des expressions booléennes). Le seul moyen de comparer null est avec est null et n'est pas null .

retour à la question, cependant , si vous devez implémenter un paramètre non null dans une procédure qui n'est pas compilé de manière native, vous devez le gérer dans la procédure. Si vous souhaitez causer une erreur, utilisez ensuite lancer et un message d'erreur personnalisé et numéro suivant: xxx

DB <> FIDDLE


1 commentaires

LARN U @Patrick ... s'il vous plaît au moins épeler mon alias correctement. ;)



1
votes

Vous pouvez l'essayer comme ci-dessous. Null et pas null ne prend pas en charge dans le paramètre de la procédure de stockage xxx


5 commentaires

Comme je l'explique dans ma propre réponse, cela ne va pas fonctionner. Ce Toujours Imprimer Le message "Vous devez entrer le nom du produit! '


Hey, merci pour votre réponse! Lorsque j'écris une telle déclaration EXEC DBO.UPDate_Lager 'haricots', 1,46; , cela ne met pas à jour rien! Pourriez-vous me guider avec la dernière étape également, s'il vous plaît?


Utiliser n'est pas null au lieu de ! = Null


Merci, maintenant, il a fonctionné mais il met à jour les mauvais champs, quand j'écris exec dbo.update_lager 'haricots', 1.46; , il met à jour le champ d'information dans les colonnes d'informations et lorsque j'écris EXEC DBO. Update_lager 'haricots', "sacs de 2 kg", 1,46; , il met toujours à jour le même champ dans la même colonne, mais pas d'autres champs d'autres colonnes.


Selon votre paramètre mentionné ci-dessus, il exécutera cette requête Mettre à jour ensemble Artikel Set Info = @info où ProduktBezeichnung = @productname



1
votes

Vous pouvez essayer l'inverse. Vérifier le nom du produit est NULL.

productname info    amount preis
abcd        xxx     10     5


2 commentaires

FYI, il est recommandé que lancer est utilisé sur RAISError maintenant. Du Documentation : " "La déclaration RAISERROR n'honore pas SET XACT_ABORT . Les nouvelles applications doivent utiliser lancer au lieu de < B> Raiserror . "


Hey, merci beaucoup pour votre réponse. Travailler sur votre réponse .....