违反主键。无法在多对多关系中插入重复键

Violation of PRIMARY KEY. Cannot insert duplicate keys in many-with-many relationship

我正在尝试在多对多关系中插入 table:

DECLARE @TransactionTempTable Table
(
ID int IDENTITY(1,1) NOT NULL PRIMARY KEY
, OperationName nvarchar(100)
, CurrentAccountID int
, AmountMoney decimal
, ExecutionDate datetime    
, RateValue money
)

INSERT INTO @TransactionTempTable 
(OperationName, CurrentAccountID, AmountMoney, ExecutionDate, RateValue)
SELECT [Operation Name] AS OperatioName         
, A.AccountID AS CurrentAccountID
, dbo.Amount([AmountMin],[AmountMax]) AS AmountMoney
, Dates.item AS ExecutionDate
, 0 AS RateValue              
FROM ExcelDatabase.dbo.Transactions T
CROSS APPLY dbo.GenerateDate(GETDATE(),[Rate],[Period]) AS Dates
INNER JOIN Gurskiy_EconomicApp.DBO.Accounts A ON T.Account = A.AccountName

DECLARE @minID int = (SELECT MIN(ID) FROM @TransactionTempTable)
DECLARE @maxID int = (SELECT MAX(ID) FROM @TransactionTempTable)
DECLARE @lastID int
DECLARE @SplitCategories Table (CategoryName nvarchar(100) NOT NULL)

WHILE (@minID<=@maxID)
BEGIN
`INSERT INTO Gurskiy_EconomicApp.dbo.Transactions(CurrentAccountID,` `AmountMoney, ExecutionDate, RateValue)`


SELECT  
CurrentAccountID
            , AmountMoney
            , ExecutionDate
            , RateValue
        FROM @TransactionTempTable
        WHERE ID = @minID   
    SET @lastID = SCOPE_IDENTITY()
INSERT INTO @SplitCategories
SELECT * 
FROM Gurskiy_EconomicApp.dbo.fnSplit( 
    (SELECT 
        OperationName 
    FROM @TransactionTempTable 
    WHERE ID = @minID)
, ',')

INSERT INTO Gurskiy_EconomicApp.dbo.TransactionCategory(TransactionID, CategoryID)
SELECT 
    @lastID
    , C.CategoryID
FROM @SplitCategories AS SC
INNER JOIN  Gurskiy_EconomicApp.dbo.Categories AS C ON SC.CategoryName = C.CategoryName

SET @minID = @minID+1
END

这是我的代码。我无法在 table TransactionCategory 中插入 CategoryID 和 TransactionID,但是 table "Transactions" 填写正确并且 table 类别也已填写。关于重复,我只是犯了一个简单的错误。但是我在我的代码中找不到任何错误。请帮忙,这项任务最终让我心烦意乱。 TransactionCategory 的定义 table:

CREATE TABLE TransactionCategory
(
    CategoryID int NOT NULL,
    TransactionID int NOT NULL,
     CONSTRAINT transaction_category_pk PRIMARY KEY (CategoryID, TransactionID), 

CONSTRAINT FK_Category 
  FOREIGN KEY (CategoryID) REFERENCES Categories (CategoryID), 

 CONSTRAINT FK_Transaction 
      FOREIGN KEY (TransactionID) REFERENCES Transactions (TransactionID)
)

您尝试将 @lastID, C.CategoryID 插入 TransactionCategory@lastID 是由身份生成的,所以我假设它在每次迭代中都是不同的。我对吗?但是,@lastID 在单次迭代中是常量,因此 C.CategoryID 必须是唯一的。 C.CategoryID 来自 Categories table 我也假设它是 PK 所以在这个 table 中没有重复的类别标识符。你能确认一下吗?

意思是@SplitCategoriesCategories连接造成重复。换句话说,在我看来 @SplitCategories 包含重复项。为了确认,您可以在插入之前添加以下行,我们将看到:

select * from @SplitCategories

我认为问题可能出在 fnSplit 函数中。也许它以错误的方式拆分 OperationName。您能否显示 fnSplit 的源代码和 OperationName 列中的示例数据?