同时更新两张表 T-SQL

Updating Two Tables At The Same Time T-SQL

我创建了一个名为 Sales_Details_Store1 的 table 和另一个名为 Sales_Store1 的 table。

它们使用 RI 绑定在一起,Sale_ID(bigint 类型的增量 1,1)是 Sales_Store1 table 中的 PK,FK 是 Sale_ID (bigint) 在 Sales_Details_Store1 table 中。

在 table 之间声明 RI 时,我使用了 ON DELETE CASCADEON UPDATE CASCADE

我遇到的问题是我需要用 PK 的增量值更新我的 FK,但能够同时更新两个 tables 记录。

我在整理触发器或事务来执行此操作时遇到了麻烦。有什么建议吗?

Sales_Store1
Sale_ID (PK, icrement(1,1), bigint, not null), 
Employee_ID (bigint, null), 
Customer_ID (bigint, null), 
Sale_Date (datetime, null), 
Taxes (money, null), 
Payment_Type (varchar, null), 
Notes (varchar, null), 
Tax_Rate (decimal, null), 
Tax_Status (int, null) 

Sales_Details_Store1
ID (PK, bigint, not null), 
Sale_ID (FK, bigint, null), 
Product_ID (bigint, null), 
Quantity (int, null), 
Unit_Price (decimal, null), 
Discount (decimal, null),
Date_Allocated (datetime, null),
Inventory_ID (bigint, null)

对我来说,这听起来不像是级联问题。听起来更像是,当您插入第二个 table.

时,您需要第一个 table 的标识值

在事务中,您应该插入 Sales_Store1,然后获取 ID(通过 Scope_Identity() or use the OUTPUT 语句),然后将数据插入 Sales_Details_Store1,提供您在前面的步骤中获得了主键。

示例:

CREATE TABLE Sale (SaleID BIGINT IDENTITY(1,1) NOT NULL,SaleDate DATETIME2)
CREATE TABLE SaleDetail (SaleDetailID BIGINT IDENTITY(1,1) NOT NULL,SaleID BIGINT,ItemDesc NVARCHAR(200))
GO


BEGIN TRAN t1;
INSERT INTO Sale(SaleDate) SELECT GETDATE();
DECLARE @SaleID BIGINT=SCOPE_IDENTITY();
INSERT INTO SaleDetail (SaleID,ItemDesc) SELECT @SaleID,'Test'
COMMIT TRAN t1;
--ROLLBACK TRAN t1;
GO

SELECT * FROM Sale
SELECT * FROM SaleDetail
GO