我有4個傳遞給查詢的參數。我的要求是返回結果,即使它們中的任何一個都爲空。我們是否必須在where子句中編寫if條件或編寫動態查詢?該參數有一個datetime
是其中之一,也是datetime
是範圍變量。如何根據運行時傳遞的參數編寫SQL Server 2008查詢
在此先感謝。
我有4個傳遞給查詢的參數。我的要求是返回結果,即使它們中的任何一個都爲空。我們是否必須在where子句中編寫if條件或編寫動態查詢?該參數有一個datetime
是其中之一,也是datetime
是範圍變量。如何根據運行時傳遞的參數編寫SQL Server 2008查詢
在此先感謝。
如果我正確理解你,你需要準備一個處理NULL參數值的where子句。
所以,這可能是一個解決方案:
declare @myDate datetime = NULL;
declare @myRangeFrom datetime = NULL;
declare @myRangeUntil datetime = NULL;
SELECT * FROM MyTable
WHERE (@myDate IS NULL OR tblDate = @myDate)
AND (@myRangeFrom IS NULL OR tbl2ndDate >= @myRangeFrom)
AND (@myRangeUntil IS NULL OR tbl2ndDate <= @myRangeUntil)
我想你問的是「SQL可選參數」:
CREATE PROCEDURE TestProc
(
@Param1 varchar(50) = NULL,
@Param2 varchar(50) = NULL,
@Param3 varchar(50) = NULL
)
AS
SELECT
*
FROM
TestTable
WHERE
((@Param1 IS NULL) OR (col1 = @Param1)) AND
((@Param2 IS NULL) OR (col2 = @Param2)) AND
((@Param3 IS NULL) OR (col3 = @Param3))
但沒有與此查詢的性能問題;儘可能優雅,它會阻止SQL Server正確使用您的索引。如果性能是一個問題,最好使用sp_executesql動態創建一個字符串並將其作爲查詢執行。
請參見:http://www.davewentzel.com/content/optional-sql-parameters-and-performance
HI感謝您的答覆但如果日期時間必須與between.I被定義意味着 創建過程[spDate] (@StartDate日期時間= NULL,@EndDate日期時間= NULL) 作爲 SELECT標題,TargetDate FROM項目 WHERE(TargetDate BETWEEN @StartDate和@EndDate) GO 即使我處理空,但問題是它得到的傳遞日期的parameter.For除權後的所有記錄的結果是:如果我通過12/31/11結果應該是12/31/11的記錄,但結果現在顯示在12/31/11之後,包括上述日期 – user812824
你能告訴我們你的基本的SQL查詢是什麼樣子? –