FK 约束错误头痛 - SQL 服务器

FK Constraint error Headache - SQL Server

对于一个项目,我正在尝试将 Access 数据库迁移到 SQL 数据库。

为此,我创建了一个带有 Access 数据库的链接服务器,并创建了一个脚本,用于将 Access 中的数据插入到 SQL 数据库中。创建的脚本是用每个插入的 try catch 制作的,因此 tables 的顺序无关紧要。为了给出一个想法,在将数据插入 SQl:

的 2 tables(总共 130 tables)脚本下方
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)。如果插入产生错误,那么它将在特定 table 上回滚。

一切正常,但访问数据库已损坏(设计错误的原因)。

我遇到了 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 errorsRelaties table 相关,所以我认为让我们先解决这个问题。 在上面你可以看到 Relaties table 由于 TariefNummers table 上的 FK error 而无法插入,这并不奇怪,因为特定的 table没有它的数据,因为 table 也有一个 FK error

所以对我来说下一个合乎逻辑的事情是修复 TariefNummers table 上的 FK 错误。虽然 TariefNummers 上的 FK 错误与 Relaties table 相关联...所以他们正在互相禁用.. 任何线索如何解决这个问题?我是否应该只删除 1 个不受欢迎的 FK(在 TariefNummers 上)。

虽然我可能离题太远了,但如果能给我一些指点,我们将不胜感激!

可能有充分的理由希望两个表彼此具有外键,但您如何才能首先将数据放入其中?

要填充表,您必须删除或忽略其中一个外键,至少是暂时的,直到两个表都被填充。