2

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

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

我可以写下面的内容,但由于硬编码文本,这不是防弹的!

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

谢谢,

4

3 回答 3

3

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

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

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


当然,您可以使函数名称稍短一些,但不值得打破约定来缩短函数调用。

此外,在这种情况下不使用 UDF 会让您确切地看到发生了什么。

于 2012-12-07T09:19:42.883 回答
2

丹尼尔问了个好问题……

我的 3 美分:

  1. 使用函数使得无法使用索引:(。
  2. 但是!=,大多数数据库都支持运算符(基于此答案<>符合 ANSI。
  3. 您可以使用COALESCE()而不是,ISNULL()但它仍然可以使用索引进行阻塞:(。
于 2012-12-07T09:20:42.133 回答
2

我不确定您要达到什么目标,但这有帮助吗?

SQL小提琴

架构设置

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 |
于 2012-12-07T09:23:47.090 回答