2011-07-30 45 views
2

我有一個存儲過程,返回指定半徑內的郵政編碼。這些參數是如何使用WHERE/AND子句中的參數在TSQL中編寫條件SELECT查詢?

ALTER PROCEDURE [dbo].[proximitySearch] 
    @proximity int = 0, 
    @country varchar (2) = NULL, 
    @city varchar (180) = NULL, 
    @state varchar (100) = NULL, 
    @stateAbr varchar (2) = NULL, 
    @postalCode varchar(20) = NULL 
AS... 

在proc,第一查詢需要選擇匹配無論是在通過一個單一的記錄(或沒有記錄),並指定經/緯度局部變量,因爲我開始下面寫:

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude 
FROM PostalCodes 
WHERE ... 

這是我難倒... WHERE子句需要基於什麼被通過是有條件的一些參數(或全部)可以爲NULL,我不想使用。他們在查詢,如果他們。

我的線沿線的思考:

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude 
FROM PostalCodes 
WHERE Longitude IS NOT NULL 
AND CASE WHEN @postalCode IS NOT NULL THEN PostalCode = @postalCode ELSE 1 END 

...但是這是行不通的。這種情況通常如何進行? (我絕對不是一個經驗豐富的TSQL傢伙!!!)提前致謝!

回答

2

遭受有實現那種邏輯的方式不止一種:

1)

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude 
FROM PostalCodes 
WHERE Longitude IS NOT NULL 
AND (@postalCode IS NULL OR PostalCode = @postalCode) 

2)

SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude 
FROM PostalCodes 
WHERE Longitude IS NOT NULL 
AND PostalCode = COALESCE(@postalCode, PostalCode) 
+0

2號作品完美! – Redtopia

2
SELECT TOP 1 @Longitude = Longitude, @Latitude = Latitude 
FROM PostalCodes 
WHERE 
     ((@postalCode IS NULL) OR (PostalCode = @postalCode)) 
    AND ((@someotherparam IS NULL) OR (someothercolumn = @someotherparam)) etc... 

但要知道,這項技術可以從 '參數嗅探'

相關問題