简体   繁体   English

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

[英]Update query is giving weird error “CfPlnUt_Aemk5Mr77-AevA2”

I am trying to update a column in a temp table, based on some condition but getting a weird error. 我正在尝试根据某些条件更新临时表中的列,但遇到了奇怪的错误。

Conversion failed when converting the varchar value 'CfPlnUt_Aemk5Mr77-AevA2' to data type int.

This error is for WelcomeEmailStatus column. 此错误适用于WelcomeEmailStatus列。 Below is my update query. 以下是我的更新查询。

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;  

Even below query is also giving same error. 甚至下面的查询也给出相同的错误。

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;  

Below is table schema 下面是表架构

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

The error message indicates that your query is trying to compare a column of type INT to a value which is not an INT , in this case the VARCHAR 'CfPlnUt_Aemk5Mr77-AevA2' 该错误消息表明您的查询试图类型的列比较INT的值不是INT ,在这种情况下, VARCHAR 'CfPlnUt_Aemk5Mr77-AevA2'

Given that hard-coding the setting of the WelcomeEmailStatus column to 1 doesn't solve it, the error can only be caused by the comparison E.MessageId = G.MessageId in your EXISTS clause. 假设将WelcomeEmailStatus列的设置硬编码为1不能解决问题,则该错误只能由EXISTS子句中的比较E.MessageId = G.MessageId引起。

Based on your comments, the EmailStatus.MessageId is an INT , but you are comparing it to #OnlineUsersOrGroups.MessageId which is a VARCHAR . 根据您的评论, EmailStatus.MessageIdINT ,但您将其与#OnlineUsersOrGroups.MessageId进行比较,后者为VARCHAR

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM