Ошибка параметра в предложении where при выполнении sp_executesql - PullRequest
0 голосов
/ 27 июня 2018

Я искал ответ, но ничего не нашел. Как устранить эту ошибку?

Сообщение 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

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Спасибо, Жоров. На этот ответ я заменил

WHERE sps.SiteId = '+quotename(@SiteId)+

с

WHERE sps.SiteId = @SiteId' 

и я побежал

EXEC sp_executesql @SQL, N'@StartDataPret DateTime, @SiteId int', @StartDataPret, @SiteId

это работает замечательно

0 голосов
/ 27 июня 2018

Сначала исправьте синтаксис (в операторе DECLARE отсутствует ',') и объявите @SiteId.

После этого обратите внимание, что вы используете переменную @SDP в инструкции T-SQL, поэтому вы должны отправить эту переменную в sp_executesql:

...
EXEC sp_executesql @SQL, N'@SDP DateTime', @SDP
...