2017-03-21 2 views
0
UPDATE Newchat 
Set [Answered] = (Select b.[Answered] 
     From Table1 b 
     where Newchat.CHAT_ID = b.[Chat ID] 
     and Newchat.Chat_Date >= '2017-Feb-22' and Newchat.Chat_Date <= '2017-Feb-28'); 

이 코드를 실행할 때마다 [Answered]의 모든 행에이 날짜를 제외하고 Null이 표시됩니다. 다소간 제안하십시오. SQL 서버 업데이트 문이 null이 됨

가 나는 또한 필터 적용 노력이 너무 작동하지 않습니다

UPDATE Newchat 
    Set [Answered] = (Select b.[Answered] 
      From Table1 b 
      where Newchat.CHAT_ID = b.[Chat ID] and Newchat.[Answered] is not null 
      and Newchat.Chat_Date >= '2017-Feb-22' and Newchat.Chat_Date <= '2017-Feb-28'); 

"Newchat합니다. [답변]은 null이 아닌".

답변

1

일치 항목이없는 경우 NULL이 표시됩니다. 아마 당신이 정말로 원하는 :

UPDATE nc 
    Set [Answered] = b.[Answered] 
    From NewChat nc join 
     Table1 b 
     on nc.CHAT_ID = b.[Chat ID] and 
      nc.Chat_Date >= '2017-Feb-22' and nc.Chat_Date <= '2017-Feb-28'; 

이것은 조건과 일치하는 행만 업데이트합니다. UPDATE 문 아래

0

시도 :

UPDATE Newchat SET [Answered] = b.[Answered] 
From Table1 b 
WHERE Newchat.CHAT_ID = b.[Chat ID] AND DATEDIFF(DAY,Newchat.Chat_Date,'2017- 
02-22') <= 0 AND DATEDIFF(DAY,Newchat.Chat_Date,'2017-02-28') >= 0 
1

당신은 두 개의 질의가 여기에 가고있다. 내부 (괄호 안에 있음)는 업데이트를 수행중인 외부 데이터를 제공합니다. 문제는 내부 쿼리가 날짜로 제한되므로 해당 날짜의 값만 제공한다는 것입니다. 그러나 외부 쿼리는 모두 개의 행을 업데이트합니다. 내부 쿼리의 데이터가없는 NULL이 있습니다.

, 당신이 당신의 쿼리를 설정 한 방식에 가깝게 유지 괄호 당신이 원하는 무엇을 제공해야 이외의 날짜 제한을 이동 -이 같은 :

UPDATE Newchat 
Set [Answered] = (Select b.[Answered] 
     From Table1 b 
     where Newchat.CHAT_ID = b.[Chat ID]) 
WHERE Newchat.Chat_Date >= '2017-Feb-22' and Newchat.Chat_Date <= '2017-Feb-28';