我猜你正在尋找這樣的事情...插入到dbo.OrderDetails後
USE tempdb;
GO
-- Start by creating a couple of tables in tempdb...
CREATE TABLE dbo.OrderHeader (
OrderID INT NOT NULL,
DetailCount INT NOT NULL
CONSTRAINT df_OrderHeader_DetailCount DEFAULT (0),
CONSTRAINT pk_OrderHeader_OrderID PRIMARY KEY CLUSTERED (OrderID)
);
GO
INSERT dbo.OrderHeader(OrderID) VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),
(21),(22),(23),(24),(25),(26),(27),(28),(29),(30);
GO
CREATE TABLE dbo.OrderDetails (
OrderDetailID INT NOT NULL IDENTITY(1,1),
OrderID INT NOT NULL
CONSTRAINT fk_OrderHeader_OrderID FOREIGN KEY REFERENCES dbo.OrderHeader (OrderID)
ON UPDATE CASCADE ON DELETE CASCADE,
Quantity INT NOT NULL
CONSTRAINT df_OrderDetails_Quantity DEFAULT (1)
CONSTRAINT ck_OrderDetails_Quantity CHECK (Quantity > 0)
CONSTRAINT pk_OrderDetails_OrderID PRIMARY KEY CLUSTERED (OrderDetailID)
);
GO
-- create a nonclustered index on dbo.OrderDetails.OrderID so that the trigger has the ability to do a seek operation.
CREATE NONCLUSTERED INDEX ix_OrderDetails_OrderID ON dbo.OrderDetails (OrderID);
-- Create an AFTER trigger on dbo.OrderDetails that will update dbo.OrderHeader after ever insert.
CREATE TRIGGER tr_UpdateDetailCount ON dbo.OrderDetails
AFTER INSERT
AS
BEGIN
UPDATE oh SET
oh.DetailCount = odx.DetailCount
FROM
dbo.OrderHeader oh
JOIN Inserted i
ON oh.OrderID = i.OrderID
CROSS APPLY (
SELECT
DetailCount = COUNT(1)
FROM
dbo.OrderDetails od
WHERE
oh.OrderID = od.OrderID
) odx;
END;
GO
-- Insert some values into dbo.OrderDetails...
INSERT dbo.OrderDetails(OrderID, Quantity)
SELECT TOP 10000
ABS(CHECKSUM(NEWID())) % 30 + 1,
ABS(CHECKSUM(NEWID())) % 5 + 1
FROM
dbo.tfn_Tally(200, 1) t
--======================================
-- Check to see that the trigger has worked as expected...
SELECT * FROM dbo.OrderHeader oh;
SELECT * FROM dbo.OrderDetails od;
--======================================
-- And cleanup...
DROP TABLE dbo.OrderDetails;
DROP TABLE dbo.OrderHeader;
dbo.OrderHeader
OrderID DetailCount
----------- -----------
1 5
2 10
3 5
4 15
5 4
6 6
7 7
8 7
9 9
10 11
11 6
12 6
13 3
14 6
15 2
16 7
17 8
18 6
19 5
20 8
21 6
22 6
23 6
24 11
25 12
26 7
27 4
28 5
29 1
30 6
那麼你的問題到底是什麼?我怎麼幫你? –
在Table1中ID和VID是一個組合PK。所以可以有多個ID條目。我需要獲取最近日期的ID的COUNT並更新另一個表。
實施例: ID VID日期 1 2 2017年8月29日 1 3 2017年8月30日 表2 ID SUM日期 1 2 2017年8月30日 – Bart
你的任務是不明確的。向我們展示樣例數據如何更新Table2。 –