Controlla se un parametro è nullo o vuoto in una stored procedure

So come verificare se un parametro è nullo ma non sono sicuro di come verificare se è vuoto … Ho questi parametri e voglio controllare che i parametri precedenti siano vuoti o nulli e quindi impostarli come di seguito

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

Apprezzerei l’aiuto.

A volte uso NULLIF in questo modo …

 IF NULLIF(@PreviousStartDate, '') IS NULL 

Probabilmente non c’è motivo per cui sia meglio del modo suggerito da @Oded e @bluefeet, solo una preferenza stilistica.

Il metodo di @ danihp è davvero bello, ma il mio vecchio cervello stanco non andrebbe a COALESCE quando penso che sia nullo o vuoto 🙂

Ecco lo schema generale:

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

'' è una stringa vuota in SQL Server.

Uso la coalesce :

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

Che ne dici di combinare coalesce e nullif ?

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

Puoi usare:

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

Un’altra opzione:

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

vedere una funzione basata su questa espressione su http://weblogs.sqlteam.com/mladenp/archive/2007/06/13/60231.aspx

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 

Per verificare se la variabile è nullo o vuota, usa questo:

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

Raccomando di verificare anche le date non valide:

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

Se si desidera un controllo “Null, empty or white space”, è ansible evitare una manipolazione stringa non necessaria con LTRIM e LTRIM come questo.

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

Puoi provare questo: –

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