我有一个查询,我通过扩展事件会话捕获了一个浮点数据类型,如下所示:
@variable = 120700.8000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
如果我尝试在 SSMS 中运行相同的查询,则会收到错误消息: 数字“120700.8000000000000000000000000000000000000000000000”超出了数字表示的范围(最大精度 38)。
就像你要跑步一样
DECLARE @variable float = 120700.8000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
跟踪运行时查询成功。事件是 rpc_completed 并且它具有持续时间、CPU、行数等...
不确定这是否相关,但有问题的查询是 exec sp_executeSQL。跟踪捕获的完整查询如下所示:
exec sp_executeSQL N'SELECT
col1,
col2
FROM table
WHERE col3 > @variable', N'@variable float',
@variable = 120700.8000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,为什么跟踪中的代码能够毫无错误地执行,但是当我将相同的代码复制/粘贴到 SSMS 时,它会引发错误。如果我采用相同的代码并修剪掉一堆零,它就可以工作。
我在 SQL Azure DB 上运行。我已经在兼容性 SQL2016、SQL2019 和 Prem SQL2019 上进行了复制。