![](/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.