2012-12-07 70 views
2

TSQL中有沒有簡單的函數可以替換下面的tsql?如何用內置的TSQL函數替換IS NULL和!=?

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

我可以寫下面的內容,但由於硬編碼的文本,這不是防彈的!

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

感謝,

+2

你想更換什麼?爲什麼? –

+0

使用內置函數(如果存在並且更短)。 –

+1

您的原始SQL很簡短明瞭。除非遇到性能問題,否則我認爲沒有理由替換它。如果你這樣做,你應該看傑克道格拉斯的答案,這可能能夠利用索引。 –

回答

3

在這種情況下,我不認爲它值得擁有的UDF來管理這個條件。

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

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


當然,你可以做的函數名略短,但它不值得打破慣例,使功能通話較短。

此外,在這種情況下不使用UDF會讓您看到恰好爲發生了什麼事情。

2

丹尼爾提出很好的問題...

我3美分。

  1. 使用功能使無法使用索引 :(
  2. 但是!=操作是由最基礎的數據庫支持( this answer,<>符合ANSI標準
  3. 您可以使用COALESCE()而不是ISNULL()但它仍然使用索引:(。
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 |