Ошибка преобразования типа данных bigint в varchar. - PullRequest
7 голосов
/ 01 марта 2011
DECLARE @ID BIGINT
set @ID = 1323
UPDATE School 
SET RegistrationFee = 'fee_' + @ID --<<<<error 
Where SchoolRegistrationId = 123

Ошибка преобразования типа данных varchar в bigint.

Ответы [ 4 ]

17 голосов
/ 01 марта 2011

Вам необходимо явно преобразовать ваш bigint в varchar:

DECLARE @ID BIGINT
set @ID = 1323

UPDATE School 
SET RegistrationFee = 'fee_' + CAST(@ID AS VARCHAR(15)) 
WHERE SchoolRegistrationId = 123

T-SQL не сделает это автоматически для вас - вам нужно быть явным и ясным об этом.

5 голосов
/ 01 марта 2011

Вы не можете объединить строку в число.Вы должны преобразовать это:

SET RegistrationFee = 'fee_' + LTRIM(STR(@ID))

2 голосов
/ 05 января 2018

SQL Server автоматически преобразует данные из одного типа данных в другой.Это неявное преобразование.В вашем скрипте есть процесс с разными типами (varchar и bigint).Бигинт - это точный числовой тип.«Символьные выражения, которые преобразуются в точный числовой тип данных, должны состоять из цифр, десятичной точки и необязательного плюса (+) или минуса (-). Пустые пробелы игнорируются. Разделители запятых, такие как разделитель тысяч в 123 456,00, не допускаются в строке. "(см. https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-conversion-database-engine ссылка.)

Вы должны использовать явное преобразование для принудительного применения. Неявное преобразование не происходит автоматически.Такие как функция CAST.

Выберите один из них в зависимости от типа данных столбца RegistrationFee в следующих выражениях.

'fee_' + CAST(@ID AS NVARCHAR(25)) 
'fee_' + CAST(@ID AS VARCHAR(25)) 
'fee_' + CAST(@ID AS CHAR(25)) 
'fee_' + CAST(@ID AS NCHAR(25)) 

- максимальное значение Bigint составляет «9 223 372 036 854 775 807», в котором 25 символов.

1 голос
/ 29 марта 2019

Это строка длиной 20 символов (знак + 19 цифр), поскольку значение bigint не имеет форматирования.

DECLARE @b AS bigint = -9223372036854775807
SELECT CAST(@b AS varchar(20)) AS [Text]

Все, что больше 20, избыточно.

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