gpt4 book ai didi

sql - 为什么 SQL Server 试图将我的 nvarchar(20) 数据类型转换为 int?

转载 作者:行者123 更新时间:2023-12-01 13:54:41 26 4
gpt4 key购买 nike

我在 SQL Select 查询中收到“转换”错误。

错误是:

Msg 248, Level 16, State 1, Line 6
The conversion of the nvarchar value '7000952682' overflowed an int column.

问题是,我的表中没有 int 列!

表结构如下:

enter image description here

这里是查询:

enter image description here

如果我将 @SU 的值设置为 NULL,那么它会按预期返回所有行。当值设置为 '7000952682' 的字符串值时,出现错误。

为什么 SQL Server 试图将 nvarchar 值转换为 int?

最佳答案

CASE 表达式的所有分支必须具有相同的类型。在这种情况下(没有双关语意),看起来 SQL Server 正在使用整数类型并将 SU 隐式转换为整数。问题是 SQL Server 中整数的最大值大约为 21 亿,而您给出的示例使用的是值 7000952682,因此会溢出。

这里有两个选择。您可以将所有内容都设为 varchar:

CASE WHEN @SU IS NULL OR @SU = '' THEN '1' ELSE [SU] END

或者,您可以使用不会溢出的类型将所有内容设为数字,例如

CASE WHEN @SU IS NULL OR @SU = ''
THEN CAST(1 AS numeric(20, 6))
ELSE CAST([SU] AS numeric(20, 6)) END

作为旁注,您可以使用 COALESCE 更简洁地编写 CASE 表达式的第一部分:

CASE WHEN COALESCE(@SU, '') = '' THEN '1' ELSE [SU] END

关于sql - 为什么 SQL Server 试图将我的 nvarchar(20) 数据类型转换为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50063920/

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