我正在尝试根据某些条件更新临时表中的列,但收到一个奇怪的错误。
Conversion failed when converting the varchar value 'CfPlnUt_Aemk5Mr77-AevA2' to data type int.
此错误与 WelcomeEmailStatus 列有关。 以下是我的更新查询。
UPDATE G
SET G.GroupNameAnchor = (Case When ChatGroupType IS NULL OR ChatGroupType = 3
Then dbo.GetHRChatTitle(G.UserChatGroupId) Else G.GroupNameAnchor End)
,
G.WelcomeEmailStatus = (Case When G.MessageId IS NOT NULL AND Exists (Select top 1 E.Status From EmailStatus E Where E.MessageId = G.MessageId)
Then (Select top 1 E.Status From EmailStatus E Where E.MessageId = G.MessageId) Else 0 End)
FROM #OnlineUsersOrGroups G;
即使在以下查询中,也会出现相同的错误。
UPDATE G
SET G.GroupNameAnchor = (Case When ChatGroupType IS NULL OR ChatGroupType = 3
Then dbo.GetHRChatTitle(G.UserChatGroupId) Else G.GroupNameAnchor End)
,
G.WelcomeEmailStatus = (Case When G.MessageId IS NOT NULL AND Exists (Select top 1 E.Status From EmailStatus E Where E.MessageId = G.MessageId)
Then 1 Else 0 End)
FROM #OnlineUsersOrGroups G;
下面是表架构
IF OBJECT_ID('tempdb..#OnlineUsersOrGroups') IS NOT NULL
DROP TABLE #OnlineUsersOrGroups;
Create Table #OnlineUsersOrGroups(row int,
UserId int,
OnlineAt DateTime,
UserRank int,
UserStatus int,
LastLoginAt DateTime,
GroupOrUsername Varchar(Max),
UserInstallId Varchar(1000),
Picture Varchar(1000),
DepartmentId int,
DepartmentName Varchar(1000),
LastMessage Varchar(Max),
MessageId int,
MessageAt DateTime,
ReceiverIds Varchar(Max),
IsRead bit,
chatgroupid Varchar(Max),
TaskId bigint,
TaskMultilevelListId int,
UserChatGroupId int,
ChatGroupType int,
ChatGroupMemberImages Varchar(Max),
GroupNameAnchor Varchar(Max),
UnreadCount int,
TotalAutoEntries int,
WelcomeEmailStatus int not null default(0))
答案 0 :(得分:2)
错误消息表明您的查询正在尝试将类型为INT
的列与不是INT
的值(在这种情况下为VARCHAR
'CfPlnUt_Aemk5Mr77-AevA2'
)进行比较
鉴于将WelcomeEmailStatus
列的设置硬编码为1并不能解决问题,该错误只能由E.MessageId = G.MessageId
子句中的比较EXISTS
引起。 / p>
根据您的评论,EmailStatus.MessageId
是INT
,但是您正在将其与#OnlineUsersOrGroups.MessageId
的{{1}}进行比较。