Sql-Server-2005
使用 JOIN 進行更新:關鍵字“RIGHT”附近的語法不正確
我正在使用 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]