第一个解决方案(只有一个新的外键)
对于以下架构
Create Table Invoice
(
InvoiceId int Primary Key,
InvoiceAmount money Not Null ,
BalanceAmount money,
AmountPaid money Not Null
)
Create Table SalesTransaction
(
SalesTransactionId int Identity(1,1) Primary Key,
CustomerId int Foreign key references Customer(CustomerId) ,
ProductId int Foreign key references Product(ProductID),
Price money,
Quantity int,
Total money,
InvoiceId int Foreign key references Invoice(InvoiceId)
)
这是您的 INSERT/UPDATE 查询
DECLARE @SalesTransactionId as int
DECLARE @InvoiceId as int
INSERT INTO [dbo].[SalesTransaction]
([CustomerId]
,[ProductId]
,[Price]
,[Quantity]
,[Total]
,[InvoiceId])
VALUES
(1
,1
,1
,1
,1
,NULL)
SET @SalesTransactionId = SCOPE_IDENTITY()
SET @InvoiceId = 1
INSERT INTO [dbo].[Invoice]
([InvoiceId]
,[InvoiceAmount]
,[BalanceAmount]
,[AmountPaid])
VALUES
(@InvoiceId
,1
,1
,1)
UPDATE [dbo].[SalesTransaction]
SET [InvoiceId] = @InvoiceId
WHERE SalesTransactionId = @SalesTransactionId
GO
我还建议您将表的列设置InvoiceId
为Invoice
身份。
第二种解决方案(使用新的外键和发票 pk 的身份)
对于以下架构
Create Table Invoice
(
InvoiceId int Identity(1,1) Primary Key,
InvoiceAmount money Not Null ,
BalanceAmount money,
AmountPaid money Not Null
)
Create Table SalesTransaction
(
SalesTransactionId int Identity(1,1) Primary Key,
CustomerId int Foreign key references Customer(CustomerId) ,
ProductId int Foreign key references Product(ProductID),
Price money,
Quantity int,
Total money,
InvoiceId int Foreign key references Invoice(InvoiceId)
)
这是您的 INSERT/UPDATE 查询
DECLARE @SalesTransactionId as int
DECLARE @InvoiceId as int
INSERT INTO [dbo].[SalesTransaction]
([CustomerId]
,[ProductId]
,[Price]
,[Quantity]
,[Total]
,[InvoiceId])
VALUES
(1
,1
,1
,1
,1
,NULL)
SET @SalesTransactionId = SCOPE_IDENTITY()
INSERT INTO [dbo].[Invoice]
([InvoiceAmount]
,[BalanceAmount]
,[AmountPaid])
VALUES
(1
,1
,1)
SET @InvoiceId = SCOPE_IDENTITY()
UPDATE [dbo].[SalesTransaction]
SET [InvoiceId] = @InvoiceId
WHERE SalesTransactionId = @SalesTransactionId
GO