簡體   English   中英

為什么SQL Server嘗試將我的nvarchar(20)數據類型轉換為int?

[英]Why is SQL Server trying to convert my nvarchar(20) datatype to an int?

我在SQL Select查詢中收到“轉換”錯誤。

錯誤是:

Msg 248,Level 16,State 1,Line 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

或者,您可以使用不會溢出的類型將所有內容都設為數字,例如

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM