更新查询给出了奇怪的错误“ CfPlnUt_Aemk5Mr77-AevA2”

时间:2018-10-10 11:35:46

标签: sql sql-server sql-server-2012 ado.net

我正在尝试根据某些条件更新临时表中的列,但收到一个奇怪的错误。

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))

1 个答案:

答案 0 :(得分:2)

错误消息表明您的查询正在尝试将类型为INT的列与不是INT的值(在这种情况下为VARCHAR 'CfPlnUt_Aemk5Mr77-AevA2')进行比较

鉴于将WelcomeEmailStatus列的设置硬编码为1并不能解决问题,该错误只能由E.MessageId = G.MessageId子句中的比较EXISTS引起。 / p>

根据您的评论,EmailStatus.MessageIdINT,但是您正在将其与#OnlineUsersOrGroups.MessageId的{​​{1}}进行比较。