我在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
......