Mik*_*keA 2 sql t-sql sql-server
我在SQL Select查询中收到"转换"错误.
错误是:
消息248,级别16,状态1,行6
nvarchar值'7000952682'的转换溢出了一个int列.
问题是,我的表中没有int列!
这是表结构:
这是查询:
如果我将值设置@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
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用不会溢出的类型将所有内容都设为数字,例如
CASE WHEN @SU IS NULL OR @SU = ''
THEN CAST(1 AS numeric(20, 6))
ELSE CAST([SU] AS numeric(20, 6)) END
Run Code Online (Sandbox Code Playgroud)
作为旁注,您可以CASE
使用COALESCE
以下内容更简洁地编写表达式的第一部分:
CASE WHEN COALESCE(@SU, '') = '' THEN '1' ELSE [SU] END
Run Code Online (Sandbox Code Playgroud)