ALTER PROCEDURE [dbo].[TEST_01]
(
@StartDate DateTime,
@EndDate DateTime
)
AS
BEGIN
SET NOCOUNT ON;
Declare @sql as nvarchar(MAX);
SET @sql = @sql + ';WITH CTE_ItemDetails
MAX(D.Name) as Name,
SUM(ISNULL(DT.col1, 0)) AS col1,
SUM(ISNULL(DT.col2, 0)) AS col2,
SUM(ISNULL(DT.col3, 0)) AS col3,
GROUPING(D.ItemType) AS ItemTypeGrouping
FROM Items D
INNER JOIN Details DT ON DT.ItemId = D.ItemId
INNER JOIN Report R ON R.ReportId = DT.ReportId
where 1=1'
SET @sql = @sql + ' AND (R.ReportDate >= ' + @StartDate + 'AND R.ReportDate <=' + @EndDate +')'
IF @someOtherVariable is not null
SET @sql = @sql + ' AND R.someColumn IN (''' +replace(@someOtherVariableValues,',','')+''+')'
SET @sql = @sql + 'SELECT col1, col2, col3 FROM CTE_ItemDetails'
EXECUTE (@sql)
END
上記のT-SQLコードに類似したストアドプロシージャがあります。 は、私はそれを実行したときに、私は以下のエラーを取得しています (私は私が得ているエラーに関連していないと感じたコードの多くを削除したことに注意してください)。エラーメッセージ文字列からdatetimeを変換するときに変換に失敗しました
文字列からdatetime型に変換するとき、変換に失敗しました。
私のパラメータは、形式以下の値を持つ
exec TEST_01 @StartDate=N'4/1/2016 12:00:00 AM',@EndDate=N'4/30/2016 12:00:00 AM'
トラブルは私が動的である何
SET @sql = @sql + ' AND (R.ReportDate >= ' + @StartDate + 'AND R.ReportDate <=' + @EndDate +')'
以下の行でSQL文を設定していた方法であるように見えます私はエラーを回避するために適用することができます最高の日付の書式設定。
日付を引用する必要があります。これを '@sql + 'AND(R.ReportDate> =' '' + @StartDate + '' 'AND R.ReportDate <=' '' + @EndDate + '') '' – Siyual
@Siyualこれは同じエラーを返します – StackTrace