我在尝试运行以下 SQL 时收到有关错误。我正在尝试使用几个不同的参数运行动态查询。任何意见或建议将不胜感激。
BETWEEN '+ @StartDate +' AND '+ @EndDate +')
应该是
BETWEEN '''+ @StartDate +''' AND '''+ @EndDate +''')
您的代码应如下所示
DECLARE @StartDate NVARCHAR(10) = '04/01/2018',
@EndDate NVARCHAR(10) = '04/01/2018',
@Location NVARCHAR(MAX) = 'Newcastle, Salt Creek',
@DayType NVARCHAR(20) = 'Calendar',
@SQL NVARCHAR(MAX)
SELECT @SQL = 'SELECT S.SiteCode,
S.Name AS Site_Name,
L.Name,
DATEADD(HOUR, (T.Period) + 1, P.DateData) AS PeriodEnding,
SUM(T.Ins) AS SumOfIns,
SUM(T.Outs) AS SumOfOuts
FROM dbo.Location L
INNER JOIN dbo.Traffic T ON L.ID = T.LocationID
INNER JOIN dbo.Publish P ON T.PublishID = P.ID
INNER JOIN dbo.Site S ON P.SiteID = S.ID
WHERE ((P.DateData) BETWEEN '''+ @StartDate +''' AND '''+ @EndDate +''')
AND T.Ins > -1
AND ((T.EditSequence) = 0)
AND ((P.CanPublish) = 1)
AND L.IsActive = 1
AND (L.IsInternal = 0 OR L.IsInternal IS NULL)
AND S.CustomerID = 1
AND S.Name in (''' + REPLACE(@Location,',',''',''') + ''')
AND ('+ @DayType +' = ''Calendar'')
OR (S.Name in (''' + REPLACE(@Location,',',''',''') + ''') AND '+ @DayType +' = ''Business'' AND (T.Period between 7 and 17))
GROUP BY S.SiteCode,
S.Name,
L.Name,
DATEADD(HOUR, (T.Period)+1, P.DateData)
ORDER BY S.SiteCode,
S.Name,
L.Name,
DATEADD(HOUR, (T.Period)+1, P.DateData)';
print @sql
--EXEC sp_executesql @sql