Запрос на обновление выдаёт странную ошибку "CfPlnUt_Aemk5Mr77-AevA2" - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь обновить столбец во временной таблице, основываясь на некоторых условиях, но получаю странную ошибку.

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 голосов
/ 10 октября 2018

Сообщение об ошибке указывает, что ваш запрос пытается сравнить столбец типа INT со значением, которое не является INT, в данном случае VARCHAR 'CfPlnUt_Aemk5Mr77-AevA2'

, учитывая, чтожесткое программирование установки столбца WelcomeEmailStatus в 1 не решает проблему, ошибка может быть вызвана только сравнением E.MessageId = G.MessageId в вашем предложении EXISTS.

На основании ваших комментариевEmailStatus.MessageId - это INT, но вы сравниваете его с #OnlineUsersOrGroups.MessageId, который является VARCHAR.

...