web-dev-qa-db-fra.com

Vérifier si un paramètre est null ou vide dans une procédure stockée

Je sais comment vérifier si un paramètre est null mais je ne suis pas sûr de savoir s'il est vide ... J'ai ces paramètres et je veux vérifier que les paramètres précédents sont vides ou nuls, puis les définir comme ci-dessous

ALTER PROCEDURE [dbo].[GetSummary]
    @PreviousStartDate NVARCHAR(50) ,
    @PreviousEndDate NVARCHAR(50) ,
    @CurrentStartDate NVARCHAR(50) ,
    @CurrentEndDate NVARCHAR(50)
AS
  BEGIN
    IF(@PreviousStartDate IS NULL OR EMPTY)
        SET @PreviousStartdate = '01/01/2010'  for example..

Je vous serais reconnaissant de l'aide.

39
user710502

J'utilise parfois NULLIF comme si ...

IF NULLIF(@PreviousStartDate, '') IS NULL

Il n'y a probablement aucune raison pour que ce soit mieux que le chemin suggéré par @Oded et @bluefeet, juste une préférence stylistique.

La méthode de @ danihp est vraiment cool mais mon vieux cerveau fatigué n'irait pas à COALESCE quand je pense que c'est nul ou vide :-)

68
Rex Miller

Voici le schéma général:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')

'' est une chaîne vide dans SQL Server.

32
Oded

J'utilise coalesce :

IF ( COALESCE( @PreviousStartDate, '' ) = '' ) ...
11
dani herrera

Pourquoi ne pas associer coalesce et nullif?

SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010')
3
Pavel Hodek

Une autre option:

IF ISNULL(@PreviousStartDate, '') = '' ...

voir une fonction basée sur cette expression à l'adresse http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx

3
Erik K.

vous pouvez utiliser:

IF(@PreviousStartDate IS NULL OR @PreviousStartDate = '')
2
Taryn

Pour vérifier si la variable est nulle ou vide, utilisez ceci:

IF LEN(ISNULL(@var, '')) = 0
2
Fábio Nascimento

Si vous souhaitez utiliser un paramètre est facultatif, utilisez-le.

CREATE PROCEDURE uspGetAddress @City nvarchar(30) = NULL, @AddressLine1 nvarchar(60) = NULL
    AS
    SELECT *
    FROM AdventureWorks.Person.Address
    WHERE City = ISNULL(@City,City)
    AND AddressLine1 LIKE '%' + ISNULL(@AddressLine1 ,AddressLine1) + '%'
    GO
1
Alam Usmani

Vous pouvez essayer ceci: -

IF NULLIF(ISNULL(@PreviousStartDate,''),'') IS NULL
SET @PreviousStartdate = '01/01/2010'
0
TracyT

Si vous souhaitez une vérification "Null, espace vide ou espace blanc", vous pouvez éviter toute manipulation inutile des chaînes avec LTRIM et RTRIM comme ceci.

IF COALESCE(PATINDEX('%[^ ]%', @parameter), 0) > 0
    RAISERROR ...
0
Jodrell

Je recommande également de vérifier les dates non valides:

set @PreviousStartDate=case ISDATE(@PreviousStartDate) 
    when 1 then @PreviousStartDate 
        else '1/1/2010'
    end
0
John Dewey