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
Yukarıdaki T-SQL koduna benzer bir saklı yordamım var. bunu yürütmek zaman aşağıdaki hatayı alıyorum (i hissetmek çok fazla kod kaldırdık Not hatası i alıyorum alakalı değildir). karakter dizesinden datetime dönüştürme işlemi sırasındaHata iletisi Dönüştürme, dize tarihini karakter dizisinden dönüştürürken başarısız oldu
Dönüşüm başarısız oldu.
Benim parametreleri formatında aşağıdan değerlere sahip
exec TEST_01 @StartDate=N'4/1/2016 12:00:00 AM',@EndDate=N'4/30/2016 12:00:00 AM'
sorun i dinamik nedir
SET @sql = @sql + ' AND (R.ReportDate >= ' + @StartDate + 'AND R.ReportDate <=' + @EndDate +')'
altında hattında SQL deyimi ayarlıyorum şekilde gibi görünüyor En iyi tarih biçimlendirme hatalardan kaçınmak için başvurabilirim.
Tarihler belirtmeniz gerekiyor, bunu '@sql +' ve (R.ReportDate> = '' '+ @StartDate +' '' ve R.ReportDate <= '' '+ @EndDate +' olarak değiştirmeniz gerekir. '') '' – Siyual
@Siyual bu – StackTrace