永动bug制造机 2023-02-20 09:33 采纳率: 0%
浏览 19

sp_executesql执行sql变量的问题

存储过程里需要查询并记录一条数据脚本如下

declare @totalSql nvarchar(max)
declare @sum_amount decimal
declare @sum_count decimal


set @totalSql='
select @sum_amount=isnull(sum(t2.detail_amount),0),@sum_count=isnull(sum(t2.number),0)
from merchant_purchase_order t1
inner join merchant_purchase_order_detail t2 on t2.order_id=t1.id
inner join shopping_goods t3 on t3.id=t2.goods_id and t3.goods_kind=1
where order_state between 1 and 10 '

exec sp_executesql  @totalSql  

最后执行抛出异常:必须声明标量变量 "@sum_amount"。

请教下是有其他方法,还是这个方法的写法不对

  • 写回答

4条回答 默认 最新

  • 不咕鸟会咕咕 2023-02-20 09:42
    关注

    您需要在 sp_executesql 中指定参数,以便将查询结果存储到变量中。您可以通过在 SQL 语句中使用 OUTPUT 关键字和 sp_executesql 的 OUTPUT 参数来实现。

    以下是您的示例代码的修改版本:

    DECLARE @totalSql NVARCHAR(MAX)
    DECLARE @sum_amount DECIMAL
    DECLARE @sum_count DECIMAL
    
    SET @totalSql = N'
    SELECT @sum_amount = ISNULL(SUM(t2.detail_amount), 0),
           @sum_count = ISNULL(SUM(t2.number), 0)
    FROM merchant_purchase_order t1
    INNER JOIN merchant_purchase_order_detail t2 ON t2.order_id = t1.id
    INNER JOIN shopping_goods t3 ON t3.id = t2.goods_id AND t3.goods_kind = 1
    WHERE order_state BETWEEN 1 AND 10
    '
    
    EXEC sp_executesql @totalSql, N'@sum_amount DECIMAL OUTPUT, @sum_count DECIMAL OUTPUT', @sum_amount OUTPUT, @sum_count OUTPUT
    
    SELECT @sum_amount AS 'sum_amount', @sum_count AS 'sum_count'
    

    在上面的代码中,我们使用 N'@sum_amount DECIMAL OUTPUT, @sum_count DECIMAL OUTPUT' 指定了输入参数类型,并且在执行 sp_executesql 时将 @sum_amount @sum_count 参数设置为 OUTPUT 模式。

    请注意,您需要将 @sum_amount @sum_count 参数的类型与查询结果的类型匹配。另外,您还需要在最后使用 SELECT 语句来显示这些变量的值。

    希望这可以解决您的问题!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月20日