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
构建字符串时从 float
到 varchar
。
使用STR()函数:
declare @f float=894589.4
declare @sql varchar(100)='select ' + str(@f,10,2)
exec (@sql)
输出:
894589.4
很确定答案在地上,但我看不到。代码:
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
构建字符串时从 float
到 varchar
。
使用STR()函数:
declare @f float=894589.4
declare @sql varchar(100)='select ' + str(@f,10,2)
exec (@sql)
输出:
894589.4