SQL exec 'rounds?' 浮点值

SQL exec 'rounds?' float value

很确定答案在地上,但我看不到。代码:

DECLARE @f float = 894589.4;
SELECT @f;
EXEC ('SELECT '+@f)

894589.4 894589

为什么?不止于此,如果:

DECLARE @f float = 1.4;

1.4 1.4

但真正让我困惑的是——这个

 DECLARE @f float = 1234567.4;

1234567.4 1234570

DECLARE @f float = 894589.4;
declare @query nvarchar(4000)
SELECT @f;
set @query= 'SELECT @f' 


EXEC sp_executesql @query, N'@f float', @f

尽管我的答案被某人降级了,但我认为使用 EXEC 作为参数提交的正确方法是正确的

怎么样 声明 @f float = 894589.44567;

我们将把我们的 SP can handle the float 更改为 4 digits + str(@f,10,4)?

回答更多:因为正在转换为 INT

这是因为 implicit casting 在为 dynamic sql 构建字符串时从 floatvarchar

使用STR()函数:

declare @f float=894589.4
declare @sql varchar(100)='select ' + str(@f,10,2)
exec (@sql)

输出:

894589.4