DECLARE @ID BIGINT
set @ID = 1323
UPDATE School
SET RegistrationFee = 'fee_' + @ID --<<<<error
Where SchoolRegistrationId = 123
将数据类型varchar转换为bigint时出错。
答案 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岁以上的人都是多余的。