2011-09-10 67 views
3

只是想知道我 同事對我說,不要用columnName=''改用Len(columnName)==0我爲什麼要使用萊恩(列名),而不是列名=「」(SQL Server 2008中)

這發生了,當我查詢的東西,我希望表格中的值爲空或空的所有列。

對空字符串使用len I/o測試有沒有好處?我看不到任何東西。

謝謝

+0

通常情況下,您不希望在函數調用中包裝列,因爲這是不可糾正的,並且意味着無法使用索引和列統計信息。可能的重複[檢查長度是否比查詢空字符串更快?](http://stackoverflow.com/questions/3350959/is-it-faster-to-check-if-length- 0比它比較它的一個空字符串) –

+0

@Martin Smith看起來'Len' *可能* sargable雖然...如果它被選爲實現這樣的優化(所有具有相同長度的字符串在索引中是連續的),因此可以將其轉換爲(名稱>「AAA」和名稱<「ZZZ」)的意圖等價物。我不知道是否應用了這樣的優化,或者索引(如果有的話)的實際性能影響是什麼,只是一個沉思。 – 2011-09-10 07:52:00

+0

@pst所有長度相同的字符串在索引中都不是連續的,它們按照排序規則按照字典順序排列? –

回答

1

如果你想要的行的值爲空字符串或null你應該這樣做。

where Col = '' or Col is null 

使用len(Col)不會給你的行與null值。

+0

有趣.Didnt知道不會給出空值的行 – user9969

+0

我剛剛看到這篇文章,並希望注意到,NULLs不是值。 NULL只是缺少或不適用值的標記。但是一個空字符串''是一個值。這是不同的。所以當列允許NULL時,請確保您在TSQL中處理這些列 – CPMunich

相關問題