我正在嘗試執行UPDATE或INSERT,但我不確定是否可以不使用循環。這裏是這樣的例子:SQL更新或通過比較日期插入
說,我有這個SQL下面我加入了兩個表:tblCompany和tblOrders。
SELECT CompanyID, CompanyName, c.LastSaleDate, o.SalesOrderID, o.SalesPrice
, DATEADD(m, -6, GETDATE()) AS DateLast6MonthFromToday
FROM dbo.tblCompany c
CROSS APPLY (
SELECT TOP 1 SalesOrderID, SalesPrice
FROM dbo.tblOrders o
WHERE c.CompanyID = o.CompanyID
ORDER BY SalesOrderID DESC
) AS a
WHERE Type = 'End-User'
示例結果:
CompanyID, SalesOrderID, SalesPrice, LastSalesDate, DateLast6MonthFromToday
101 10001 50 2/01/2016 10/20/2016
102 10002 80 12/01/2016 10/20/2016
103 10003 80 5/01/2016 10/20/2016
我所試圖做的是比較LastSalesDate和DateLast6MonthFromToday。條件如下:
- 如果LastSalesDate較小(早期),然後執行INSERT INTO tblOrders(CompanyID,列1,列2 ...)VALUES(CompanyIDFromQuery,Column1Value,Column2Value)
- 否則,執行UPDATE tblOrders SET SalesPrice = 1111 WHERE的SalesOrderID = a.SalesOrderID
作爲上述樣品結果,查詢將只更新的SalesOrderID 10001和10003和公司102,由於LastSaleDate NO插入件是更大,那麼就執行更新SalesOrderID。
我知道這可能是可以做到的,如果我創建一個遊標循環遍歷每條記錄,然後進行比較然後更新或插入,但我想知道是否有另一種方式執行此循環,因爲我有大約20K記錄。
很抱歉的混亂,
您應該至少顯示錶格的模式並告訴我們它們是如何連接的。 –
我不明白這裏的問題。爲什麼你不能只執行插入和更新語句 – maSTAShuFu
給你的樣本表數據.. –