在带有计算的动态选择子句上sp_executesql舍入问题



我在SQL Server的存储过程中遇到sp_executesql输出的问题。下面是存储过程的一部分:

DECLARE @RET_Amt as NUMERIC(18,2)
DECLARE @v_Select nvarchar(200)
SET @v_select = 'SELECT  @RET_Amt=(14315.00-10420.00) /10420.00'
exec sp_executesql @v_select,N'@RET_Amt numeric output', @RET_Amt output;
SELECT 'Return Value' = @RET_Amt

这将返回不正确的 0.00 输出。当我们只是在提示符下执行选择子句时:

select (14315.00-10420.00) / 10420.00

输出为 : 0.3738003838

所以sp_executesql正在四舍五入结果。有人可以帮助我在不四舍五入的情况下获得价值sp_executesql吗?我的存储过程是创建动态选择子句并生成查询。所以我必须和sp_executesql一起去.

感谢您的任何输入!

您没有正确指定返回参数的精度和小数位数 - 如果您未指定任何内容,则默认值为 numeric(18,0) - 这意味着小数点后没有数字 - 因此四舍五入。

试试这个:

DECLARE @RET_Amt as NUMERIC(18,2)
DECLARE @v_Select nvarchar(200)
SET @v_select = 'SELECT  @RET_Amt = (14315.00 - 10420.00) / 10420.00'
EXEC sp_executesql @v_select, N'@RET_Amt NUMERIC(18,2) OUTPUT', @RET_Amt OUTPUT;
SELECT  'Return Value' = @RET_Amt

EXEC 语句中,您需要定义要NUMERIC(18,2) @RET_Amt(就像您已经定义了变量一样) - 而不仅仅是numeric......

相关内容

  • 没有找到相关文章

最新更新