2016-08-10 114 views
1

SELECT a,b FROM fooSELECT a,b FROM foo WHERE a=a and b=b相同嗎?這些查詢是否相同?

我在運行它們時得到了不同的結果。

最後,我想爲參數設置爲我的SSRS報告:

SET @a Varchar (20) DECLEARE @a = Null SET @b Varchar (20) DECLEARE @b = Null SELECT a,b FROM foo WHERE a=isnull(@a,a) and b=isnull(@b,b)

回答

1

你得到不同的結果,因爲有一個空的地方在A或B NULL並不等於NULL在SQL Server

改爲使用它。

SELECT a, b FROM foo 
WHERE (@a ISNULL or a [email protected]) AND (@b ISNULL or [email protected]) 

此外,您還需要在設置它們之前先聲明變量。

+1

你知道工作嗎?請 –

+0

@ H.Ben我添加了如何處理空參數 – scsimon

0

這兩個查詢都不會返回基於a或b中的NULL值的相同結果集。

只是因爲NULL不等於NULL。

+0

這不(總是)真實。 OP表示他得到了不同的結果。 – scsimon

+0

你的回答是正確的我沒有注意到null不等於null。 – Ripon

+1

記住SQL Server是一件好事。這在COUNT(*)與COUNT([列])中很重要 – scsimon