2012-09-04 14 views
8

Ho letto questo: How do I check if a Sql server string is null or empty ma non mi ha aiutato in questa situazione.Come verificare se un parametro è vuoto o nullo nella stored procedure Sql Server nell'istruzione IF?

Il pezzo di codice dalla mia stored procedure:

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0) 
     SELECT @sql = 'SELECT * FROM TEST1' 
    ELSE 
     SELECT @sql = 'SELECT * FROM TEST2' 
PRINT @sql; 

@item1 è NVARCHAR(1000) tipo.

Quando eseguire questa procedura immagazzinata, ho fornito il valore per item1

EXEC [dbo].[my_proc] 
     @item1 = N'' 

mostra

SELECT * FROM TEST1 // è esatto se @item1 = N'some'

anziché

SELECT * FROM TEST2

È da qualche parte una funzione in sql per verificare se una stringa è nulla o vuota O Ho fatto un errore da qualche parte?

Come in C# ->string.IsNullOrEmpty(myValue)

risposta

19

che è il comportamento giusto.

se si imposta @item1 ad un valore all'espressione di seguito sarà vero

IF (@item1 IS NOT NULL) OR (LEN(@item1) > 0) 

Comunque in SQL Server non v'è una tale funzione, ma è possibile creare il proprio:

CREATE FUNCTION dbo.IsNullOrEmpty(@x varchar(max)) returns bit as 
BEGIN 
IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0 
    RETURN 0 
ELSE 
    RETURN 1 
END 
+0

Sì, il mio errore è stato a 'o' invece di' e'. –

2

Di Certo che funziona; quando @item1 = N'', è IS NOT NULL.

È possibile definire @item1 come NULL per impostazione predefinita nella parte superiore della procedura memorizzata, quindi non passare un parametro.

+0

Risolto. Il problema era "OR". Così ho cambiato in 'AND'. –

4

Per controllare se la variabile è l'uso nullo o vuoto questo:

IF LEN(ISNULL(@var, '')) = 0 
    -- Is empty or NULL 
ELSE 
    -- Is not empty and is not NULL 
Problemi correlati