以下のダイナミカクエリは機能しますが、以下のものが最適化できるかどうか、またはそれを行うためのより良い方法があるかどうか疑問に思っています。
ユーザーが場所と収集日を入力する Web フォームがあります。収集日については、From Date Collected と To Date Collected があります。ユーザーは、収集日を空白のままにします。この場合、収集日よりも後の処理が行われます。
以下の IS NOT NULL と 1=1 の実行方法に注意してください。また、動的 SQL が最善のアプローチなのか、それとももっと簡単な方法があるのか疑問に思っています。
DECLARE @sql varchar(max);
SET @sql = 'SELECT * from tblProgram WHERE 1=1'
IF (@Location IS NOT NULL)
BEGIN
SET @sql = @sql + ' AND Location = ' + @Location
END
IF (@FromDateCollected IS NOT NULL AND @ToDateCollected IS NOT NULL)
BEGIN
SET @sql = @sql + ' AND pw.DateCollected >= ' + QUOTENAME(convert(varchar, @FromDateCollected,101),'''')
+ ' AND pw.DateCollected <= ' + QUOTENAME(convert(varchar, @ToDateCollected,101),'''')
END
ELSE IF (@FromDateCollected IS NOT NULL AND @ToDateCollected IS NULL)
BEGIN
SET @sql = @sql + ' AND pw.DateCollected >= ' + QUOTENAME(convert(varchar, @FromDateCollected,101),'''')
END
exec(@sql)