クエリに4つのパラメータが渡されています。私の要件は、いずれかがnullでも結果を返すことです。 where句にif条件を記述するか、動的クエリを記述する必要がありますか?パラメータにはdatetime
が含まれており、datetime
も範囲変数です。実行時に渡されるパラメータに基づいてSQL Server 2008クエリを作成する方法
ありがとうございます。
クエリに4つのパラメータが渡されています。私の要件は、いずれかがnullでも結果を返すことです。 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応答していただきありがとうございますが、手順[spDate] (@StartDate日時=ヌル、@EndDate日時= NULL) SELECTタイトル、TargetDate FROMとしてプロジェクト (@StartDateと@EndDate BETWEEN TargetDate) GO 私はNULLハンドルが、問題はそれがparameter.For例に渡された日付の後にすべてのレコードの結果を得るだろうにもかかわらず:私は12を渡した場合/ 31/11結果は12月31日に記録されますが、結果には上記の日付を含む12/31/11の後にすべてが表示されます – user812824
基本的なSQLクエリの外観を教えてください。日時はbetween.Iで定義しなければならない場合 作成意味 –