Ошибка при преобразовании значения varchar 'A001' в тип данных int - PullRequest
0 голосов
/ 04 октября 2018

Я разрабатываю хранимую процедуру SQL Server 2016 с пакетом обновления 2 (SP2), которая генерирует строку JSON.

Когда я ее запускаю, этот фрагмент кода:

set @batch = (
    select 1 as [BatchId], Value as [Name], (CAST(SYSDATETIMEOFFSET() as varchar(34))) as [Created]
        from VariableData
        where VariableData.ProductionOrderId = @productionOrderId and VariableData.VariableDataId = 10
    for json path, WITHOUT_ARRAY_WRAPPER
);

С этими данными: enter image description here

Создает следующую ошибку:

Ошибка при преобразовании значения varchar 'A001' в тип данных int

Но я не понимаю, почему я получаю это сообщение, потому что я не использую столбец VariableDataId в приведенном выше коде sql.

Если в столбце VariableDataId (типа *) нет символа char1021 *), я не получаю никакой ошибки.

Почему я получаю это сообщение об ошибке?

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы ссылаетесь на столбец VariableDataId в строке 4 вашего запроса

where VariableData.ProductionOrderId = @productionOrderId and VariableData.VariableDataId = 10

У вас есть два варианта.Во-первых, используйте правильный тип данных в предикате.

where VariableData.ProductionOrderId = @productionOrderId and VariableData.VariableDataId = '10'

Во-вторых, преобразуйте столбец с TRY_CAST / TRY_CONVERT, если вы хотите использовать значение INT в качестве условия.

where VariableData.ProductionOrderId = @productionOrderId and TRY_CAST(VariableData.VariableDataId AS INT) = 10

Я рекомендуюпервый вариант.

0 голосов
/ 04 октября 2018

Но я не понимаю, почему я получаю это сообщение, потому что я не использую столбец VariableDataId в приведенном выше SQL-коде.

На самом деле вы находитесь в состоянии where VariableData.VariableDataId = 10.Это вызывает неявное преобразование в int для всех значений в этом столбце.

Просто измените сравнение на VariableData.VariableDataId = '10' (где '10' - строка / varchar), и неявное преобразование не будет выполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...