【问题标题】:Param error in where clause when executing sp_executesql执行 sp_executesql 时 where 子句中的参数错误
【发布时间】:2018-06-27 09:01:28
【问题描述】:

我搜索了答案,但什么也没找到。如何解决这个错误?

消息 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

【问题讨论】:

    标签: sql sql-server parameters where-clause sp-executesql


    【解决方案1】:

    首先,更正语法(DECLARE 语句中缺少',')并声明@SiteId

    之后,注意你在T-SQL语句中使用了@SDP变量,所以你必须把这个变量发送给sp_executesql

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

    【讨论】:

      【解决方案2】:

      谢谢你。 有了这个答案,我替换了

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

      WHERE sps.SiteId = @SiteId' 
      

      我跑了

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

      效果很好

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 2015-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多