【发布时间】:2014-08-13 13:54:53
【问题描述】:
我需要使用两个字符串的连接来更新数据库中的 bigint 值。 SQL 不喜欢这样。 DailyArchive.LogicalAccount 是一个 bigint,@padding 和 a.AccountNumber 是 varchars。
Update dbo.DailyArchive
SET DailyArchive.LogicalAccount = CONCAT(@padding, a.AccountNumber)
FROM @_AccountList a
JOIN dbo.DailyArchive ON a.AccountNumber = DailyArchive.LogicalAccount
我收到以下错误消息:
消息 8114,级别 16,状态 5,过程 updateNumbers_ArchiveDB,行 15 将数据类型 varchar 转换为 bigint 时出错。
我是如何执行程序的:
declare @p1 dbo.AccountListType
insert into @p1 values(N'Account Number',N'Account Type')
insert into @p1 values(N'7463689',N'Basic')
insert into @p1 values(N'1317893',N'Premium')
insert into @p1 values(N'2806127',N'Basic')
exec updateNumbers_ArchiveDB
@_AccountList=@p1,
@padding=N'111',
@proc_dateStart='2008-01-04 11:24:46',
@proc_dateEnd='2008-01-04 11:24:46'
【问题讨论】:
-
您收到此错误是因为 @padding、a.AccountNumber 或两者中的某些数据无法转换为 BIGINT。你确定这些值都不包含任何不是数字的东西吗?
-
试试
select CONCAT(@padding, a.AccountNumber) FROM @_AccountList a JOIN dbo.DailyArchive ON a.AccountNumber = DailyArchive.LogicalAccount- 你看到任何包含非数字字符的吗? -
这里的细节非常少。 @padding、a.AccountNumber 或 DailyArchive.LogicalAccount 的行不是数字字符串值。
-
更新了 OP 以及我如何调用该过程。
-
您似乎将列名插入到表中 -
insert into @p1 values(N'Account Number',N'Account Type'),因此您正在尝试将('111' + 'Account Number')转换为 BIGINT。删除这个插入,只在你的表中插入有效数据,你应该没问题。