动态 SQL:在需要条件的上下文中指定的非布尔类型表达式,靠近“,”

问题描述 投票:0回答:2

我在尝试运行以下 SQL 时收到有关错误。我正在尝试使用几个不同的参数运行动态查询。任何意见或建议将不胜感激。

sql-server dynamic
2个回答
0
投票
BETWEEN '+ @StartDate +' AND '+ @EndDate +')

应该是

BETWEEN '''+ @StartDate +''' AND '''+ @EndDate +''')

0
投票

您的代码应如下所示

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
© www.soinside.com 2019 - 2024. All rights reserved.