Я искал ответ, но ничего не нашел. Как устранить эту ошибку?
Сообщение 137, Уровень 15, Состояние 2, Строка 10 Необходимо объявить скалярную переменную "@SDP".
Это мой код:
declare @SQL NVARCHAR(4000), @dfilter NVARCHAR(100) @SDP DateTime set @dfilter = (case when @SDP is null then '@SDP BETWEEN CAST(sp.StartDate AS DATE) AND CAST(sp.EndDate AS DATE) ' else '@SDP = CAST(sp.StartDate AS DATE) ' end) set @SQL = N'UPDATE p SET PriceWithVAT = promo.Price, IsPromo=1 FROM #preturi p JOIN (SELECT pp.ItemId, Price FROM SalesPromotion sp (NOLOCK) JOIN SalesPromotionXSite sps (NOLOCK) ON sp.SalesPromotionId = sps.SalesPromotionId JOIN SalesPromotionDetail spd (NOLOCK) ON sps.SalesPromotionId = spd.SalesPromotionId JOIN #preturi pp on pp.ItemId = spd.ItemId WHERE sps.SiteId = '+quotename(@SiteId)+ ' AND spd.IsActive = 1 AND ' + @dfilter+ ') promo ON p.ItemId = promo.ItemId' BEGIN EXEC sp_executesql @SQL END
Спасибо, Жоров. На этот ответ я заменил
WHERE sps.SiteId = '+quotename(@SiteId)+
с
WHERE sps.SiteId = @SiteId'
и я побежал
EXEC sp_executesql @SQL, N'@StartDataPret DateTime, @SiteId int', @StartDataPret, @SiteId
это работает замечательно
Сначала исправьте синтаксис (в операторе DECLARE отсутствует ',') и объявите @SiteId.
DECLARE
@SiteId
После этого обратите внимание, что вы используете переменную @SDP в инструкции T-SQL, поэтому вы должны отправить эту переменную в sp_executesql:
sp_executesql
... EXEC sp_executesql @SQL, N'@SDP DateTime', @SDP