【问题标题】:Error converting data type varchar to bigint during update更新期间将数据类型 varchar 转换为 bigint 时出错
【发布时间】: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。删除这个插入,只在你的表中插入有效数据,你应该没问题。

标签: sql-server concatenation


【解决方案1】:

尝试删除线...

insert into @p1 values(N'Account Number',N'Account Type')

这些不会转换成BIGINT

即使一个值为NULL,它仍然可以,因为CONCAT 会忽略它,即...

CONCAT(NULL,'111') 将提供111

【讨论】:

  • 原来如此。你和@GarethD 想通了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多