Тип ОС: Windows SQL Сервер: 2017 Сортировка: SQL_Latin1_General_CP1_CI_AS
У меня есть хранимая процедура, как показано ниже
USE [test]
GO
ALTER PROCEDURE [dbo].[output_test]
@output nvarchar(250)
AS
BEGIN
SELECT CAST(@output AS int)
END
Вход в процедуру: '1234' Я использую Функция MultiByteToWideChar () для преобразования из UTF8 в UCS2 перед передачей в процедуру. Выход функции MultiByteToWideChar () - «1111». Но когда процедура выполняется, я получаю сообщение об ошибке, как показано ниже:
Conversion failed when converting the nvarchar value '1234.' to data type int.
Отмечено, что добавлен дополнительный символ '.' добавляется в конце.
Но когда мы только что получили данные без приведения (SELECT), они имеют правильное значение как 1234
Я выделил (strlen + 1) * sizeof (SQLWCHAR) = > (4 + 1) * 2 = 10 байт для хранения результирующей широкой строки символов, которая выводится из функции MultiByteToWideChar. Здесь дополнительные 2 байта выделяются для нулевого завершения.
Однако, если эти дополнительные 2 байта для нулевого завершения не добавляются, процедура работает нормально.
- Может ли кто-нибудь помочь мне в понимании почему дополнительные байты вызывают проблему (хотя это 0, это приводит к '.')?
- Есть ли какое-либо ограничение с CAST для int при использовании символов Unicode?
Заранее спасибо.