gpt4 book ai didi

sql-server - SQL Server float 据类型超出范围

转载 作者:行者123 更新时间:2023-12-03 15:46:56 25 4
gpt4 key购买 nike

我有一个查询,我通过扩展事件 session 捕获了一个浮点数据类型,如下所示:

@variable = 120700.8000000000000000000000000000000000000000000000
如果我尝试在 SSMS 中运行相同的查询,则会收到错误消息:
数字 '120700.8000000000000000000000000000000000000000000000' 超出了数字表示的范围(最大精度 38)。
就像你要运行一样
DECLARE @variable float = 120700.8000000000000000000000000000000000000000000000
跟踪运行时查询成功。事件是 rpc_completed 并且它具有持续时间、CPU、行数等...
不确定这是否相关,但有问题的查询是 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 上进行了复制。

最佳答案

why is the code in the trace able to execute without error, but when Icopy/paste that same code to SSMS it throws an error.


当您将此查询放入 SSMS 时
exec sp_executeSQL N'SELECT
col1,
col2
FROM table
WHERE col3 > @variable', N'@variable float',
@variable = 120700.8000000000000000000000000000000000000000000000
文字 120700.8000000000000000000000000000000000000000000000被解释为数字/十进制类型。引擎尝试将其转换为数字/十进制类型的值并失败,因为数字的最大精度为 38 位。
如果你把这个查询放在 SSMS 中,它应该可以工作
exec sp_executeSQL N'SELECT
col1,
col2
FROM table
WHERE col3 > @variable', N'@variable float',
@variable = 120700.8000000000000000000000000000000000000000000000E0
我已添加 E0在末尾。
使 float文字我们需要使用科学记数法,如 Constants (Transact-SQL) 中所述

why is the code in the trace able to execute without error


我不能肯定地说,但我怀疑您在跟踪中看到的代码与应用程序发送到 SQL Server 的代码不完全相同。它可能以这样一种方式发送,即参数类型和值实际上是 float , 不是带有所有这些零的文本字符串。
我认为,应用程序很可能会进行 RPC 调用,将正确类型的正确参数传递给函数调用。因此,从来没有从文本字符串到 numeric 的转换。或 float当应用程序成功调用时键入。

关于sql-server - SQL Server float 据类型超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62681770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com