Je suis sûr que cela a une réponse très simple que je ne trouve pas ... J'ai une hiérarchie simple dans une base de données où chaque ligne a un ParentId. Si ParentId IS NULL
, alors c'est un élément racine. J'ai la procédure stockée:Procédure stockée pour gérer le paramètre nul
CREATE PROCEDURE GetByParent @parentId int
AS BEGIN SELECT * FROM TABLE1 WHERE ParentId = @parentId END
Il fonctionne très bien si j'envoie un entier, mais si j'envoie NULL
il devient ParentId = NULL
, qui ne fonctionne pas dans la norme ANSI. Je sais qu'il y a COALESCE(@parentId, ParentId)
, mais cela retourne toutes les lignes quand @parentId IS NULL
. Je peux faire une instruction IF ELSE et copier la requête (une avec = @parentId
et l'autre avec IS NULL
), mais je suis sûr qu'il y a une meilleure façon.
C'est tout ... ça ne me vint pas à l'esprit d'utiliser COALESCE des deux côtés. –
J'ai sorti la version COALESCE et l'ai remplacée par cette version actuelle. Sur une grande table, COALESCE (ParentId) peut provoquer des problèmes de performances en déclenchant une analyse de table. Avec cette version actuelle, le planificateur de requêtes doit toujours utiliser tout index que vous avez sur ParentId. – Toby
Hé, c'est ma ligne;) – laher