![](/img/trans.png)
[英]Why is my SQL query trying to convert an nvarchar value to int? (using CONTAINSTABLE())
[英]Why is SQL Server trying to convert my nvarchar(20) datatype to an 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
不要在where
子句中使用case
。 逻辑更简单,更准确地表达为:
where (@su is null or @su = '' or @su = su)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.