#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. Избавьте себя от хлопот и будьте явными.