Ошибка преобразования, несмотря на использование ПРИВЕДЕНИЯ?

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

У меня есть курсор, который извлекает ссылочные коды из таблицы и увеличивает код на единицу, если он соответствует определенным критериям. Ссылка является буквенно-цифровой, поэтому она объявляется как nvarchar .

Чтобы упростить задачу, предположим, что @RefNo = 'v1' с намерением изменить это на v2:

 DECLARE @versionNo INT
DECLARE @RefNo nvarchar(50)
DECLARE @NewVersionNo INT
DECLARE @NewRefNo nvarchar(50)

set @VersionNo = Right(@RefNo, 1)
set @NewVersionNo = @versionNo   1
set @NewRefNo = Left(@RefNo, Len(@RefNo - 1))   cast(@NewVersionNo as nvarchar)

print @NewRefNo
  

Последняя строка завершается ошибкой Conversion failed when converting the nvarchar value 'v1' to data type int. , и я понимаю, почему это происходит — оператор ‘ ‘ не может одновременно обрабатывать значения nvarchar и int, но я бы подумал, что приведение к nvarchar в @NewVersionNo позволило бы избежать этого.

Также обратите внимание, что я использую 2008R2, поэтому не могу использовать функцию CONCAT.

Комментарии:

1. Вам нужно указать длину varchar . Он будет использовать длину по умолчанию 30. Но, конечно, если бы это был параметр, значение по умолчанию было бы равно 1. Избавьте себя от хлопот и будьте явными.

Ответ №1:

вы пропустили закрывающую скобку, измените свой код строки, как показано ниже

 set @NewRefNo = Left(@RefNo, Len(@RefNo) - 1)   cast(@NewVersionNo as nvarchar)
                            -----------^
  

If @RefNo=’V1′

Вывод:

введите описание изображения здесь