2 votes

Renvoi de valeurs de données NULL lors de l'utilisation de SP_ExecuteSQL

J'utilise un sp_executesql pour pouvoir être flexible avec ce que je choisis de renvoyer. Je rencontre un problème lorsque je tente de renvoyer des données là où il n'y en a pas.

Disons par exemple que j'essaie de trouver toutes les lignes où il n'y a pas de propriétaire assigné. Actuellement, ma requête est écrite comme suit.

 if @owner <> ''
    Begin
        SELECT @sql = @sql + 'and owner LIKE ''%'+@owner+'%'''
    END

Cela me permet de ne pas avoir à sélectionner un propriétaire. Si je le fais, il sera bien sûr inclus dans ma requête.

Puisque j'essaie maintenant d'ajouter une ligne qui me permettrait essentiellement de ramener les propriétaires non assignés :

 if @owner = 'Unassigned'
BEGIN
    SELECT @sql = @sql + 'and owner IS NULL' 
END

Cependant, lorsque je fais cela, la liste entière est affichée. Réflexions / suggestions ?

3voto

Kenneth Fisher Points 3462

Si vous changez votre dernière ligne en PRINT @sql vous remarquerez que les deux conditions sont réunies. Essayez de modifier votre code comme suit.

if @owner <> ''
Begin
    if @owner = 'Unassigned'
        SELECT @sql = @sql + 'and owner IS NULL'
    else
        SELECT @sql = @sql + 'and owner LIKE ''%'+@owner+'%'''
END

0voto

Vous pouvez également utiliser cette option avec CASE expression

SELECT @sql = @sql + CASE ISNULL(@owner, '') 
                       WHEN '' THEN ''
                       WHEN 'Unassigned' THEN ' and owner IS NULL'
                       ELSE ' and owner LIKE ''%' + @owner + '%''' END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X