我已经有一段时间没有在 T-SQL 环境中工作了。我之前在 Google 工作过,当然,他们有自己独特的 SQL 风格。现在我回来了,我正在阅读我的 T-SQL 功能。
我理解 MERGE 语句(至少,我想我知道!),但我正在查看示例,我看到其中包含一些我不熟悉的语法:
来自 MSDocs:
CREATE PROCEDURE Production.usp_UpdateInventory
@OrderDate datetime
AS
MERGE Production.ProductInventory AS target
USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod
JOIN Sales.SalesOrderHeader AS soh
ON sod.SalesOrderID = soh.SalesOrderID
AND soh.OrderDate = @OrderDate
GROUP BY ProductID) AS source (ProductID, OrderQty)
ON (target.ProductID = source.ProductID)
WHEN MATCHED AND target.Quantity - source.OrderQty <= 0
THEN DELETE
WHEN MATCHED
THEN UPDATE SET target.Quantity = target.Quantity - source.OrderQty,
target.ModifiedDate = GETDATE()
OUTPUT $action, Inserted.ProductID, Inserted.Quantity,
Inserted.ModifiedDate, Deleted.ProductID,
Deleted.Quantity, Deleted.ModifiedDate;
GO
EXECUTE Production.usp_UpdateInventory '20030501'
我对以下行最感兴趣:
GROUP BY ProductID) AS source (ProductID, OrderQty)
第二个括号中发生了什么?对我来说,它看起来像是列别名,但它似乎在我期望它可以工作的上下文中不起作用(SQL Server 2019)。