stuff proper not funcion for sql-server tsql

sql-server - proper - stuff sql server for xml path



String.IsNullOrEmpty como funciĆ³n para VARCHARs en SQL? (9)

Aquí está mi función que "extiende" ISNULL y comprueba si está vacío también. El valor de prueba se verifica en nulo y, si no es nulo, se recorta y luego se verifica la longitud.

La función devuelve la cadena de prueba si NO es nula o está vacía, de lo contrario se devuelve la segunda cadena.

CREATE FUNCTION [dbo].[ISNULLOREMPTY] ( @value NVARCHAR(max), @return NVARCHAR(max) ) RETURNS NVARCHAR(MAX) AS BEGIN IF (@value IS NULL) BEGIN RETURN @return END ELSE BEGIN IF (LEN(LTRIM(@value)) = 0) BEGIN RETURN @return END END RETURN @value; END GO

Digamos que tengo una función o un procedimiento almacenado que admite varios parámetros de VARCHAR. Me he cansado de escribir SQL como este para probar si estos parámetros tienen un valor:

IF @SomeVarcharParm IS NOT NULL AND LEN(@SomeVarcharParm) > 0 BEGIN -- do stuff END

Tiene que haber una mejor manera de hacer esto. No esta ahi


Aumenté la respuesta de Atron aunque técnicamente implementó IfNullOrWhiteSpace .

Aquí está mi implementación de IfNullOrEmpty() :

IF EXISTS (SELECT * FROM sys .objects WHERE object_id = OBJECT_ID(N''[dbo].[IfNullOrEmpty]'' ) and type in ( N''FN'')) DROP FUNCTION dbo.IfNullOrEmpty go CREATE FUNCTION dbo.IfNullOrEmpty(@value varchar(max), @substitute varchar(max)) returns varchar(max) as BEGIN IF @value IS NOT NULL AND LEN(@value) > 0 RETURN @value RETURN @substitute END


Me doy cuenta de que esta es una pregunta antigua, pero esto es lo que uso en MSSQL: LEN(ISNULL(@asdf, ''''))>0

Ejemplo:

DECLARE @asdf varchar(10) SET @asdf = NULL --You can change this value to test different outputs BEGIN IF LEN(ISNULL(@asdf, '''')) > 0 PRINT @asdf ELSE PRINT ''IS NullOrEmpty'' END --You can use it inline like this: PRINT CASE LEN(ISNULL(@asdf, '''')) WHEN 0 THEN ''IS NullOrEmpty'' ELSE @asdf END

Creo que esto es más simple y más directo que las otras soluciones porque está comprobando literalmente si la cadena es nula o tiene una longitud de 0.


No es necesario verificar el valor nulo antes de llamar a LEN. Solo puede usar LEN (@SomeVarcharParm)> 0. Esto devolverá false si el valor es NULL, '''' o ''''. Esto se debe a que NULL> 0 devuelve falso. Ver por ti mismo ejecutar:

SELECT CASE WHEN NULL > 0 THEN ''NULL > 0 = true'' ELSE ''NULL > 0 = false'' END, CASE WHEN LEN(NULL) > 0 THEN ''LEN(NULL) = true'' ELSE ''LEN(NULL) = false'' END, CASE WHEN LEN('''') > 0 THEN ''LEN('''''''') > 0 = true'' ELSE ''LEN('''''''') > 0 = false'' END, CASE WHEN LEN('' '') > 0 THEN ''LEN('''' '''') > 0 = true'' ELSE ''LEN('''' '''') > 0 = false'' END, CASE WHEN LEN('' test '') > 0 THEN ''LEN('''' test '''') > 0 = true'' ELSE ''LEN('''' test '''') > 0 = false'' END


Puedes hacer ISNULL(@SomeVarcharParam, '''') <> '''' o puedes crear un UDF que devuelve un poco:

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

Y IF NOT dbo.IsNullOrEmpty(@SomeVarcharParam) BEGIN ... usando IF NOT dbo.IsNullOrEmpty(@SomeVarcharParam) BEGIN ...

Tenga en cuenta que al llamar a un UDF, DEBE prefijar al propietario (aquí, dbo).


Si estoy concatenando o uniendo una cadena en línea (dentro de una declaración de selección), y quiero verificar si la columna es NULL o Vacía, hago esto:

ISNULL(''starting to build string '' + NULLIF(some_table..some_col_that_might_be_null_or_empty, '''') , ''string to append if the resulting concatenation is null'')

El NULLIF en la parte interna de la expresión forzará a la columna a NULL si está vacía, entonces la expresión ISNULL externa puede depender de una entrada consistente y reaccionar en consecuencia.


Simplemente puede hacer IF @SomeVarcharParam <> '''' ya que la condición se evaluará como NULL y la rama no se tomará si el parámetro es nulo


Usa esta función (basada en la de Derek):

CREATE FUNCTION dbo.isNullOrEmpty(@x varchar(max)) RETURNS BIT AS BEGIN IF @x IS NOT NULL AND LEN(@x) > 0 RETURN 0 RETURN 1 END

como

dbo.isNullOrEmpty(@someVar)

o

WHERE dbo.isNullOrEmpty(@someVar) = 1

en un procedimiento almacenado o consulta.


IF COALESCE(@SomeVarcharParm, '''') <> '''' BEGIN -- do stuff END