如何用内置的TSQL函数替换IS NULL和!=?

时间:2012-12-07 09:05:49

标签: sql sql-server tsql isnull

TSQL中是否有任何可以替换下面的tsql的简单函数?

SELECT * FROM Users
WHERE (Username IS NULL OR Username != @username)

我可以写下面但由于硬编码文本而不是防弹!

 SELECT * FROM Users
    WHERE ISNULL(Username, 'dummytext') != @username

谢谢,

3 个答案:

答案 0 :(得分:3)

在这种情况下,我认为使用UDF来管理这种情况并不值得。

(Username IS NULL OR Username != @username) 43 个字符

dbo.IsNullorNotEqual(Username, @Username)=0 43 个字符


当然,您可以使函数名称稍微缩短,但不值得破坏约定以使函数调用更短。

此外,在这个实例中不使用UDF会让你看到完全发生了什么。

答案 1 :(得分:2)

丹尼尔问好问题......

我的3美分:

  1. 使用功能使无法使用索引 :(。
  2. 但是大多数数据库都支持!=运算符(基于this answer<>符合ANSI标准。
  3. 您可以使用COALESCE()代替ISNULL(),但它仍然可以使用索引进行阻止:(。

答案 2 :(得分:2)

我不确定你想要达到的目的,但这有帮助吗?

SQL Fiddle

架构设置

create table Users(Username varchar(99));
insert into Users(Username) values('Alice');
insert into Users(Username) values('Bob');
insert into Users(Username) values(null);

查询1

DECLARE @username varchar(99)
SET @username = 'Alice'
SELECT * FROM Users 
EXCEPT
SELECT * FROM Users where Username = @username

<强>结果:

| USERNAME |
------------
|   (null) |
|      Bob |