2012-03-11 95 views
0

我試圖寫一個UPDATE SQL查詢來清理我的數據庫有點...SQL 2005更新查詢

這是我做過嘗試,但它確實爲我創造巨大的問題,結束了沒有履行我所有的WHEREs它改變了不應該改變記錄...

UPDATE Orders 
SET Orders.OrderStatus = Cancelled 
WHERE Orders.OrderStatus in (New,Pending,Processing,Payment Declined,Awaiting Payment,See Line Items,See Order Notes,Backordered) 
AND Orders.Total_Payment_Received = 0 

還有第三個條款。該條款並沒有工作,它的目的是獲得超過六十天的所有記錄,它看起來像它不會工作,我不知道爲什麼我執行代碼。我害怕在這裏張貼這條線,因爲我會看起來愚蠢。它是這樣的:

AND Orders.OrderDate BETWEEN DATEADD(Day, -60, GetDate()) 

所以只有OrderDate大於60天的記錄應該受到影響。

如果有人能幫助我編一個查詢,將工作它會不勝感激......

回答

0

我不能完全肯定,如果你說的第一個更新的工作或沒有,或者如果它只是訂單日期檢查造成了問題,所以我只是解決訂單日期。

如果你想超過60天的記錄...

and Orders.OrderDate < dateadd(day, -60, getdate()) 

然而,由於GETDATE()包括時間,你可能要採取不予考慮......

and Orders.OrderDate < dateadd(day, -60, convert(char(10), getdate(), 101)) 

在這種情況下,convert函數刪除日期的時間部分。

另外,如果您的訂單狀態應該是字符串那麼他們就需要用引號引起來,所以完整的查詢內容是這樣的:

UPDATE Orders 
SET Orders.OrderStatus = 'Cancelled' 
WHERE Orders.OrderStatus in ('New','Pending','Processing','Payment Declined','Awaiting Payment','See Line Items','See Order Notes','Backordered') 
AND Orders.Total_Payment_Received = 0 
AND Orders.OrderDate < dateadd(day, -60, convert(char(10), getdate(), 101)) 

一句忠告上運行的更新。總是先用WHERE子句先運行SELECT,以便確定哪些行將受到影響。這會爲你節省很多痛苦。如果有太多的行需要更新,請使用SELECT TOP 5000或其他東西,這樣您至少可以檢查其中的一些。在更新之前始終知道你要更新的內容。

+0

整個查詢是有點搞砸了......我試圖執行它時一直收到錯誤,我無法弄清楚這個查詢有什麼問題...... – henryaaron 2012-03-11 13:01:28

+0

編輯你的問題來顯示整個查詢,並告訴我們遇到了什麼錯誤。否則我們將無法提供幫助。 – 2012-03-11 13:04:12

+0

這就是我正在執行的整個查詢......它只是說內部500服務器錯誤 – henryaaron 2012-03-11 13:06:55

0

如果您希望您的訂單日期必須介於today's date and 60 days before之間,您應該執行以下操作。

WHERE start_date BETWEEN dateadd(day,-60,getdate()) AND getdate(); 
0

使用查詢分析器並創建您想要取消的訂單視圖。景色真棒。通過視圖,您可以一次檢查一個數據子集,檢查您的視圖是否包含正確的數據子集。例如:

開始通過創建一個名爲viewOrdersToCancel,顯示所有訂單與Total_Payment_Received = 0(這是通過把= 0過濾柱內完成)

做一個SELECT * FROM viewOrdersToCancel查看這些記錄。

然後修改該視圖並在DateAdd(d,-60,GetDate()),GetDate())條件之間添加OrderDate()。

做另一個SELECT * FROM viewOrdersToCancel查看這些記錄。

現在修改視圖,在in子句中添加不同的OrderStatus值。

現在視圖包含要設置爲「已取消」

只需運行與內更新語句訂單的子集加入:
這裏假設你有一個獨特的OrderId

UPDATE Orders 
SET OrderStatus = 'Cancelled' 
FROM Orders t1 
INNER JOIN viewOrdersToCancel t2 
ON t1.OrderId = t2.OrderId