将数据类型bigint转换为varchar时出错。

时间:2011-03-01 19:30:35

标签: sql-server sql-server-2008

DECLARE @ID BIGINT
set @ID = 1323
UPDATE School 
SET RegistrationFee = 'fee_' + @ID --<<<<error 
Where SchoolRegistrationId = 123

将数据类型varchar转换为bigint时出错。

4 个答案:

答案 0 :(得分:15)

您需要将bigint显式转换为varchar:

DECLARE @ID BIGINT
set @ID = 1323

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

T-SQL不会自动为您执行此操作 - 您需要明确并清楚它。

答案 1 :(得分:5)

您无法将字符串连接到数字。你必须转换它:

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

答案 2 :(得分:2)

SQL Server会自动将数据从一种数据类型转换为另一种数据类型。这是隐式转换。您的脚本有一个具有diffirent类型的进程(varchar和bigint)。 Bigint是一种精确的数字类型。 &#34;正在转换为精确数字数据类型的字符表达式必须包含数字,小数点和可选的加号(+)或减号( - )。领先的空白被忽略了。字符串中不允许使用逗号分隔符,例如123,456.00中的千位分隔符。&#34; (请参阅。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&#39;有25个字符。

答案 3 :(得分:1)

它是一个长度为20个字符(符号+ 19位数字)的字符串,因为bigint值没有格式。

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

20岁以上的人都是多余的。