Я получаю ошибку преобразования на одном сервере, но не на другом сервере, оба имеют одинаковую базу данных, одна тестовая, а другая живая, тест на самом деле является копией живого, но немного старым. На живом сервере включена функция 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
нет букв. - 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