我试图在多对多关系中插入表格:
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
这是我的代码。我不能在表TransactionCategory中插入CategoryID和TransactionID,但是表&#34; Transactions&#34;填写正确,表格类别也已填写。关于共和党人,我只是犯了一个简单的错误。但我在代码中找不到任何错误。帮助PLZ,这个任务在一天结束时吃掉了我的脑海。 TransactionCategory表的定义:
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)
)
答案 0 :(得分:1)
您尝试将@lastID, C.CategoryID
插入TransactionCategory
。 @lastID
是由身份生成的,所以我假设它在每次迭代中都是不同的。我对吗?但是,@lastID
在一次迭代中是常量,因此C.CategoryID
必须是唯一的。 C.CategoryID
来自Categories
表,我也假设它是PK,因此此表中没有重复的类别标识符。你能证实吗?
这意味着将@SplitCategories
加入Categories
会导致重复。换句话说,在我看来@SplitCategories
包含重复项。要确认,您可以在插入之前添加以下行,我们将看到:
select * from @SplitCategories
我认为问题可能出在fnSplit
函数中。也许它以错误的方式分裂OperationName
。您能否显示fnSplit
的源代码和OperationName
列中的示例数据?