Sql-Server-2005

使用 JOIN 進行更新:關鍵字“RIGHT”附近的語法不正確

  • September 21, 2018

我正在使用 SQL Server Management Studio 2005。我想在另一個表中查找列值,使用tblOrder_ordernr兩個表中的共享 ID,但只更新一個表。

對我來說,這個查詢寫得很奇怪(UPDATE tblTid但是SET viewOrderAlla...),但這是我必須處理的。我將如何重寫這個查詢來做同樣的事情?

UPDATE tblTid RIGHT JOIN viewOrderAlla ON tblTid.sOrdernr = viewOrderAlla.tblOrder_ordernr 
SET viewOrderAlla.tblOrder_verkligtid = 0
WHERE viewOrderAlla.tblOrder_verkligtid<>0 AND tblTid.iTidID Is Null 
AND viewOrderAlla.tblOrder_levdatum>=DATEADD(month,-6,GETDATE())

根據此處的其他一些問題,我已嘗試將 SET 移至 RIGHT JOIN 之前,但我找不到任何答案,甚至可以讓我在沒有語法錯誤的情況下解析表達式。

這些錶鍊接到 Access 2013 數據庫中,查詢執行良好。但不在 SQL 伺服器中。

嘗試這樣的事情:

UPDATE viewOrderAlla
SET viewOrderAlla.tblOrder_verkligtid = 0
FROM tblTid
RIGHT JOIN viewOrderAlla ON tblTid.sOrdernr = viewOrderAlla.tblOrder_ordernr
WHERE viewOrderAlla.tblOrder_verkligtid <> 0
   AND tblTid.iTidID IS NULL
   AND viewOrderAlla.tblOrder_levdatum >= DATEADD(month, - 6, GETDATE())

如果您熟悉編寫 SELECT 語句,則使用 CTE 將 SELECT 與 UPDATE 分開可以更輕鬆地了解查詢正在做什麼。

;WITH cte AS (
   SELECT
       iewOrderAlla.tblOrder_verkligtid AS [OldValue]
       ,0 AS [NewValue]
   FROM tblTid
   RIGHT JOIN viewOrderAlla ON tblTid.sOrdernr = viewOrderAlla.tblOrder_ordernr
   WHERE viewOrderAlla.tblOrder_verkligtid <> 0
       AND tblTid.iTidID IS NULL
       AND viewOrderAlla.tblOrder_levdatum >= DATEADD(month, - 6, GETDATE())
)
UPDATE cte
SET [OldValue] = [NewValue]

引用自:https://dba.stackexchange.com/questions/218119