2012-03-24 14 views
29

So come verificare se un parametro è nullo ma non sono sicuro di come verificare se è vuoto ... Ho questi parametri e voglio controllare il precedente i parametri sono vuoti o nulli e quindi li impostiamo come sottoVerificare se un parametro è nullo o vuoto in una stored procedure

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.. 

Gradirei l'aiuto.

risposta

58

volte uso NULLIF in questo modo ...

IF NULLIF(@PreviousStartDate, '') IS NULL 

Probabilmente non c'è ragione per cui è meglio che il modo suggerito da @Oded e @bluefeet, solo preferenza stilistica.

@ il metodo di danihp è davvero cool, ma il mio vecchio e stanco cervello non sarebbe andato a fondersi quando sto pensando è nullo o vuoto :-)

+2

Ciao Rex, dato che ho letto la tua risposta, mi sono spostato sulla tua notazione. – danihp

24

Ecco lo schema generale:

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

'' è una stringa vuota in SQL Server.

+0

ritengo che dovrebbe essere: 'IF (@PreviousStartDate è nullo o @PreviousStartDate = '')' –

2

è possibile utilizzare:

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

Lo stesso codice Odiato e lo stesso errore? –

+1

@pavel grazie per aver segnalato il segno di Missin @, ma è possibile vedere dal timestamp che sono stati pubblicati nello stesso momento. – Taryn

10

io uso coalesce:

IF (COALESCE(@PreviousStartDate, '') = '') ... 
0

vi consiglio il controllo di date non valide anche:

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

Che ne dici di combinare coalesce e nullif?

SET @PreviousStartDate = coalesce(nullif(@PreviousStartDate, ''), '01/01/2010') 
0

Si può provare questo: -

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

Se volete un "Null, "spazio vuoto o bianco", è possibile evitare manipolazioni di stringhe non necessarie con LTRIM e RTRIM piace questo.

1

Se si desidera utilizzare un parametro è Opzionale, quindi utilizzarlo.

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

Per controllare se variabile è nulla o vuota uso questo:

IF LEN(ISNULL(@var, '')) = 0 
Problemi correlati