同时更新两张表 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 CASCADE
和 ON 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
我创建了一个名为 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 CASCADE
和 ON 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