0

我使用下面的代碼來比較字符串,如果它是在SQL Server 2008中有比較字符串,如果它是SQL Server 2008 NULL

IF(Name != '') 
    // Do some stuff 
ELSE IF(Phone != '') 
    // Do some stuff 
ELSE 
    // Do some other stuff 

等於在存儲過程中NULL是什麼缺點或使用上述格式的檢查字符串時的缺點。

我用之前下面的代碼:

IF(Name IS NOT NULL) 
    // Do some stuff 
ELSE IF(Phone IS NOT NULL) 
    // Do some stuff 
ELSE 
    // Do some other stuff 

預期這是行不通的。

+0

這將意味着該數據爲空字符串,而不是空。 – StuartLC

+0

@StuartLC謝謝! – Mirage

回答

1

!=/<> ''是不一樣的IS NOT NULL!你需要這個:

IF(Name <> '') 
    // Do some stuff 
ELSE IF(Phone <> '') 
    // Do some stuff 
ELSE 
    // Do some other stuff 

如果NamePhone可以NULL,你需要這樣的:

IF(ISNULL(Name, '') <> '') 
    // Do some stuff 
ELSE IF(ISNULL(Phone, '') <> '') 
    // Do some stuff 
ELSE 
    // Do some other stuff 

在SQL中,NULL總是<> ''。實際上,在大多數配置中,NULL也是<> NULL

+0

謝謝! 我們可以用DateTime數據類型來做同樣的事嗎? – Mirage

+0

你是什麼意思「相同的東西」?如果你想比較* SQL中的任何*字段/變量到*任何*,那麼你最需要考慮的是字段/變量可以是'NULL'的情況。你可以這樣做'IF(ISNULL(的DateField,CONVERT(DATETIME, '20140101'))<> CONVERT(DATETIME, '20140101')...'。 –

+0

抱歉, 「同樣的東西」 是指比較的DateTime數據字段,如果它的NULL或不是。謝謝! – Mirage

0

它們是不同的:如果NameNULL它永遠不會等於,或不等於''因爲沒有什麼是相當於NULL

來測試NULL的唯一方法是IS NULL

如果你想測試NULL''然後:IF ISNULL(val, '') = ''

+0

Alex謝謝!!! – Mirage