我正在尝试执行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
给你的样本表数据.. –