对于我试图将Access数据库迁移到SQL数据库的项目。
为此,我使用Access数据库创建了一个链接服务器,并创建了一个脚本,将Access中的数据插入到SQL数据库中。创建的脚本是使用每个插入的try catch创建的,因此表的排序无关紧要。为了给出一个想法,在2个表(总共130个表)的脚本下面,将数据插入SQl:
SET NOCOUNT ON
DECLARE @Rows AS INT
-- ****************************************************************************
-- ID = 1
IF NOT EXISTS (select * from TableInserted where ID = 1)
BEGIN
PRINT '~UpdateDB:'
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO [~UpdateDB](
-- [SSMA_TimeStamp],
[StepID],
[SQLInstruction],
[Description],
[Customer],
[InsertDateTime],
[InsertUserID],
[ExecutedateTime]
)
SELECT
[StepID],
[SQLInstruction],
[Description],
[Customer],
[InsertDateTime],
[InsertUserID],
[ExecutedateTime]
FROM [OPS_VSS_LINKED]...[~UpdateDB]
SELECT @Rows = @@ROWCOUNT
PRINT CAST(@Rows as NVARCHAR(10)) + ' Inserted'
COMMIT TRANSACTION
INSERT INTO TableInserted( ID, TableName, RowsInserted) VALUES (1,'~UpdateDB', @Rows)
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
ROLLBACK TRANSACTION
END CATCH
END
-- ****************************************************************************
-- ID = 2
IF NOT EXISTS (select * from TableInserted where ID = 2)
BEGIN
PRINT '~VAN SLUISVELD Origineel:'
SET IDENTITY_INSERT dbo.[~VAN SLUISVELD Origineel] ON
BEGIN TRY
BEGIN TRANSACTION
INSERT INTO [~VAN SLUISVELD Origineel](
[ID],
[a]
)
SELECT
[ID],
[a]
FROM [OPS_VSS_LINKED]...[~VAN SLUISVELD Origineel]
SELECT @Rows = @@ROWCOUNT
PRINT CAST(@Rows as NVARCHAR(10)) + ' Inserted'
COMMIT TRANSACTION
INSERT INTO TableInserted( ID, TableName, RowsInserted) VALUES (2,'~VAN SLUISVELD Origineel', @Rows)
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
ROLLBACK TRANSACTION
END CATCH
SET IDENTITY_INSERT dbo.[~VAN SLUISVELD Origineel] OFF
END
所以这个脚本只会在尚未完成的情况下插入数据(请查看TableInserted)。如果插入生成错误,则它将在特定表上回滚。
这一切都很好但是访问数据库被破坏了(因为desingnin不好)。
我得到50多个FK错误,特别是我被困在这个错误上:
Relaties:
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Relaties_Tariefnummers". The conflict occurred in database "OPS-VSS", table "dbo.Tariefnummers", column 'Tariefnummer'.
Tariefnummers:
The INSERT statement conflicted with the FOREIGN KEY constraint "Tariefnummers$RelatiesTariefnummers". The conflict occurred in database "OPS-VSS", table "dbo.Relaties", column 'RelatieNummer'.
多个FK errors
与Relaties
表一起使用,所以我想先让我们解决这个问题。
上面你可以看到Relaties
表由于FK error
表上的TariefNummers
而无法插入,这并不奇怪,因为那个特定的表还没有得到它的数据,因为那个表也是有一个FK error
。
因此,对我来说,下一个合乎逻辑的事情是修复TariefNummers
表上的FK错误。虽然TariefNummers
上的FK错误与Relaties
表相关联......所以他们互相喋喋不休..任何线索如何解决这个问题?我应该删除1个FK(在TariefNummers上),这不是首选。
虽然我可能会离开,但有些指针会受到赞赏!
答案 0 :(得分:1)
可能有正当理由想要让两个表互相拥有外键,但是你怎么能够首先将数据放入其中呢?
要填充表格,您必须至少暂时删除或忽略其中一个外键,直到填充两个表格。