ISNULL() vs COALESCE()
ISNULL ( <check_expression>, <replacement_value>)
Replaces check_expression with the specified replacement_value, when check_expression is null
NULLIF(<expression>, <expression>)
- Returns a null value if the two specified expressions are equal.
- Returns the first expression if the two expressions are not equal.
- ReturnType is the type of the first expression
- The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.
DECLARE @EmpID VARCHAR(50)
SELECT
CASE
WHEN @EmpID IS NULL
THEN 'rkbabu'
ELSE @EmpID
END
SELECT ISNULL(NULLIF(@EmpID, NULL), 'rkbabu')
SELECT NULLIF(10,20) ------> 10
SELECT NULLIF(10, NULL) ------> 10
SELECT NULLIF(10, 10) -------> NULL
SELECT NULLIF('', ' ') ----------> NULL
SELECT NULLIF('@', '@@') ------> @
SELECT NULLIF(NULL, 10) ------> ERROR -> None of the result expressions in a CASE specification can be NULL.
SELECT NULLIF(NULL, NULL) ------> ERROR -> None of the result expressions in a CASE specification can be NULL.
DECLARE @EmpID VARCHAR(50)
SELECT NULLIF(@EmpID, 10) ----------> NULL
SELECT NULLIF(@EmpID, @EmpID) ----------> NULL
SELECT CASE WHEN NULL = 10 THEN NULL ELSE 10 END ------> 10
SELECT CASE WHEN 10 = NULL THEN NULL ELSE 10 END ------> 10
SELECT CASE WHEN NULL = NULL THEN NULL ELSE 10 END ------> 10 Since one null not equal to another null
Consider some time we will use case in the where condition, this can be replaced with
ISNULL and NULLIF function
DECLARE @Column1 INT, @Column2 INT SET @Column1 = -1; SELECT * FROM tableName WHERE Column1 = CASE WHEN @Column1 = -1 THEN Column1 ELSE @Column1 END AND Column2 = CASE WHEN @Column2 IS NOT NULL THEN @Column2 ELSE Column2 END SELECT * FROM tableName WHERE Column1 = ISNULL(NULLIF(@Column1, -1), Column1) AND Column2 = ISNULL(NULLIF(@Column2, NULL), Column2)
No comments:
Post a Comment