以下に、動的にしようとしているストアドプロシージャのコードスニペットを示します。つまり、を実行しEXEC('select * from table_name WHERE filter=something')
て結果セットをWebサービスに返します。クエリしているテーブルのweek_start_dateフィールドは、日付フィールドではなく、日時フィールドです。クエリで正しく解釈されるように、datetimeパラメーターを動的SQLに適切に追加するにはどうすればよいですか?また、コードをよりクリーンにする方法について提案があれば、アドバイスを差し上げます。
データを見ると、次のような値があります。
2012-08-10 00:00:00.000
動作していないT-SQLコード:
ALTER PROCEDURE [dbo].[logged_time_by_week]
@week_start_date_filter datetime = null
AS
BEGIN
...。
DECLARE @select_clause nvarchar(4000);
DECLARE @from_clause nvarchar(4000);
DECLARE @where_clause nvarchar(4000);
DECLARE @order_clause nvarchar(4000);
SET @select_clause =
' SELECT '
+ ' [sunday_hours],'
+ ' [monday_hours],'
+ ' [tuesday_hours],'
+ ' [wednesday_hours],'
+ ' [thursday_hours],'
+ ' [friday_hours],'
+ ' [saturday_hours]'
SET @from_clause =
' FROM '
+ ' [timesheet_row] '
SET @where_clause = ''
IF @week_start_date_filter IS NOT NULL AND @week_start_date_filter != ''
BEGIN
IF @where_clause != ''
BEGIN
SET @where_clause = @where_clause + ' AND '
END
SET @where_clause = @where_clause + ' [week_start_date] = ' + CONVERT(nvarchar, @week_start_date_filter)
END
IF @where_clause != ''
BEGIN
SET @where_clause = ' WHERE ' + @where_clause
END
SET @order_clause = ' ORDER BY [' + @sort_column + '] ' + @sort_direction
EXEC(@select_clause + @from_clause + @where_clause + @order_clause)