Вам необходимо заключить параметры даты в одинарные кавычки. И чтобы встроить их в динамический SQL, вам нужно их избежать.
'... WHERE TradingDate <= ''' + CONVERT(CHAR(8), @maxDate, 112) + ''' ...'
Или сделать его немного легче для чтения (в зависимости от человека, я думаю):
'... WHERE TradingDate <= ' + CHAR(39) + CONVERT(CHAR(8), @maxDate, 112) + CHAR(39) + ' ...'
Возможно, другая проблема заключается в том, что вы не хотите объединять и вызывать функции преобразования и другие встроенные функции внутри EXEC
, как насчет:
ALTER PROCEDURE [dbo].[sprocAddDatesSymbolsAndPeriodsToAggregatedStudy]
@table VARCHAR(120),
@maxDate DATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql NVARCHAR(MAX) = N';WITH t1 AS
(
SELECT Symbol, TradingDate
FROM tblSymbolsMain
CROSS JOIN tblTradingDays
WHERE TradingDate <= ''' + CONVERT(CHAR(8), @maxDate, 112) +
'''),
t2 AS
(
SELECT Symbol, TradingDate, Period
FROM t1
CROSS JOIN tblPeriods
)
INSERT INTO ' + @table + ' (Symbol, TradeDate, Period)
(SELECT Symbol, TradingDate, Period
FROM t2
EXCEPT
(SELECT t3.Symbol, t3.TradeDate, t3.Period
FROM ' + @table + '))';
EXEC sp_executesql @sql;
END
GO