我创建了一个名为Sales_Details_Store1
的表和一个名为Sales_Store1
的第二个表。
使用RI将Sale_ID
(bigint类型的增量1,1)作为Sales_Store1
表中的PK并且FK为Sale_ID
(bigint) Sales_Details_Store1
表。
在两个表之间声明RI时,我使用了ON DELETE CASCADE
和ON UPDATE CASCADE
。
我正在努力解决的问题是我需要使用PK中增加的值更新我的FK,但能够同时更新两个表记录。
我在整理触发器或事务时遇到了麻烦。有什么建议吗?
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)
答案 0 :(得分:0)
这对我来说听起来不像是一个级联问题。听起来更像是,当您插入第二个表时,您需要第一个表中的标识值。
在事务内部,您应该插入Sales_Store1,然后获取ID(通过Scope_Identity()或使用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