2017-03-21 38 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'); 

每當我運行此代碼時,[已應答]的所有行都將變爲空,除了此日期。 請建議。SQL服務器更新語句變爲空

我也嘗試應用過濾器 「Newchat。[回答]不爲空」

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

這也不起作用。

回答

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'; 

這僅更新符合條件的行。

0

試試下面UPDATE聲明:

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';