【发布时间】:2020-10-22 04:37:15
【问题描述】:
我有一个通过扩展事件会话捕获的查询,其浮点数据类型如下所示:
@variable = 120700.8000000000000000000000000000000000000000000000
如果我尝试在 SSMS 中运行相同的查询,我会收到错误消息: 数字“120700.8000000000000000000000000000000000000000000000”超出了数字表示的范围(最大精度为 38)。
就像你要跑步一样
DECLARE @variable float = 120700.8000000000000000000000000000000000000000000000
跟踪运行时查询成功。 Event 是 rpc_completed,它有一个持续时间、cpu、rowcount 等...
不确定这是否相关,但有问题的查询是 exec sp_executeSQL。跟踪捕获的完整查询如下所示:
exec sp_executeSQL N'SELECT
col1,
col2
FROM table
WHERE col3 > @variable', N'@variable float',
@variable = 120700.8000000000000000000000000000000000000000000000
所以我的问题是,为什么跟踪中的代码能够无错误地执行,但是当我将相同的代码复制/粘贴到 SSMS 时,它会引发错误。如果我采用相同的代码并去掉一堆零,它就可以工作。
我在 SQL Azure DB 上运行。我已经在兼容性 SQL2016、SQL2019 和 Prem SQL2019 上进行了转载。
【问题讨论】:
-
文字
120700.8000000000000000000000000000000000000000000000首先隐式转换为十进制,因此出现错误。试试120700.8000000000000000000000000000000000000000000000E0(最后注E0)来源:stackoverflow.com/questions/3024306/… -
@VladimirBaranov - 完成;忍不住点赞:)
标签: sql-server precision sqldatatypes