我有2张桌子
顺序
OrderID INT
...
的OrderItems
OrderIemID INT
OrderID INT
ItemNO INT
我想要的是ItemNO
每个OrderID
从1开始,OrderIemID
中的每个新OrderItems
增加1。
我将此添加到插入触发器中。但是有可能以不同的方式做到这一点吗? UDF和计算列,并使用持久性?
ALTER FUNCTION [dbo].[afnc_Proc_CreateNewOrderItemsItemNo] (
@OrderID INT
) RETURNS INT
AS
BEGIN
DECLARE @NewItemNo INT
SET @NewItemNo=1
SELECT TOP 1 @NewItemNo = ItemNo + 1
FROM dbo.atbl_Proc_OrderItems
WHERE OrderID=@OrderID
ORDER BY ItemNo DESC
RETURN @NewItemNo
END
UPDATE U
SET ItemNO=dbo.afnc_Proc_CreateNewOrderItemsItemNo(I.OrderID)
FROM atbl_Proc_OrderItems AS U
INNER JOIN inserted I ON U.PrimKey=I.PrimKey
答案 0 :(得分:1)
;WITH x AS (SELECT OrderID, OrderItemID, ItemNo,
rn = ROW_NUMBER() OVER (PARTITION BY OrderID ORDER BY OrderItemID)
FROM dbo.OrderItems
)
UPDATE x SET ItemNo = rn;
但是正如我在评论中提到的,这个操作非常浪费,因为你可以在查询时简单地使用这个ROW_NUMBER()
操作,并保证它是准确的。