ฉันได้รับข้อผิดพลาดในการแปลงบนเซิร์ฟเวอร์เครื่องหนึ่ง แต่ไม่ใช่เซิร์ฟเวอร์อื่น ทั้งสองมีฐานข้อมูลเดียวกัน เซิร์ฟเวอร์หนึ่งคือการทดสอบ และอีกเซิร์ฟเวอร์หนึ่งใช้งานได้จริง การทดสอบนั้นเป็นสำเนาของเซิร์ฟเวอร์จริงแต่เก่าเล็กน้อย เซิร์ฟเวอร์สดเปิดใช้งาน AlwaysOn เมื่อฉันรัน Print @@version บนเซิร์ฟเวอร์ทั้งสอง ฉันได้รับการติดตาม
Microsoft SQL Server 2016 (SP1-CU1) (KB3208177) - 13.0.4411.0 (X64)
Jan 6 2017 14:24:37
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows Server 2016 Standard 6.3 <X64> (Build 14393: ) (Hypervisor)
นี่คือแบบสอบถาม sql ที่ฉันใช้อยู่
exec sp_executesql N'select * From DataTable
WHERE DT1 = @P1 AND DT2 = @P2
order by
cp1',N'@P1 smallint,@P2 smallint',0,0
คอลัมน์ DT2 มีค่าผสม 1 และ 1BAC และ NULL แต่ฉันไม่เข้าใจว่าทำไมมันถึงทำงานบนเซิร์ฟเวอร์เครื่องหนึ่ง แต่ไม่ใช่เซิร์ฟเวอร์อื่น
'01HP011'
ไม่ใช่ค่าint
ที่ถูกต้องint
s ไม่มีตัวอักษรอยู่ - person Larnu   schedule 28.09.2020SmallInt
และสตริงในนิพจน์ เช่นDT2 = @P2
สตริงจะถูกแปลงเป็นSmallInt
คุณสามารถใช้Cast
เพื่อบังคับการแปลงด้วยวิธีอื่น เช่นDT2 = Cast( @P2 as VarChar(10) )
. - person HABO   schedule 29.09.2020Try_Convert
เพื่อระบุค่าที่ไม่ดี - person HABO   schedule 29.09.2020