Я получаю сообщение об ошибке при попытке запустить следующий SQL. Я пытаюсь запустить динамический запрос с несколькими различными параметрами. Будем весьма благодарны за любые советы и предложения.
/* ----- For Testing ----- */
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 ('+ @Location +' IN (LT.Name) 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)';
EXEC sp_executesql @sql
Еще раз спасибо за всю помощь. Мой код теперь выглядит так ...
DECLARE @StartDate NVARCHAR(10) = '04/01/2018',
@EndDate NVARCHAR(10) = '04/01/2018',
@Location NVARCHAR(MAX) = 'Salt Creek,Madill',
@DayType NVARCHAR(12) = '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 '''+ CONVERT(NVARCHAR, @StartDate, 109) +''' AND '''+ CONVERT(NVARCHAR, @EndDate, 109) +''')
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 LTRIM(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
CREATE TABLE #DailyTracking (Site_Code INT, Site_Name VARCHAR(50), Location_Name VARCHAR(50), PeriodEnding DATE, SumOfIns INT, SumOfOuts INT)
INSERT INTO #DailyTracking EXEC sp_executesql @sql
SELECT * FROM #DailyTracking
DROP TABLE #DailyTracking
Я получаю сообщение об ошибке - сообщение 207, уровень 16, состояние 1, строка 20 Неверное имя столбца «Календарь».
Я пытаюсь использовать эту хранимую процедуру для создания отчета в SSRS. Проблема в том, что я пытаюсь передать параметр @DayType, чтобы выполнить запрос между двумя отдельными таймфреймами. Если я объявлю параметр в динамическом SQL, он будет работать, но я не знаю, как передать параметр из отчета SSRS в динамический sql @sql. Любые советы / советы? Вся помощь была отличной.