外键约束-写入错误表-SQL Server 2008

外键约束-写入错误表-SQL Server 2008,sql,sql-server-2008,Sql,Sql Server 2008,我是SQL Server新手。我有一个将数据加载到stage表中的批处理过程。那张桌子上有几把外键。我想转储加载到错误表时遇到的所有外键错误。我该怎么做 谢谢 一种新的新手方法是将数据加载到没有FK约束的临时表中,删除坏记录(违反FK约束),然后将数据从临时表移动到阶段表中。如果您的桌子上有很多FK,这可能会有点乏味,因此您可能希望自动化该过程 这里有一些伪代码来说明我的意思 -- First put the raw data into MyTempTable -- Find

我是SQL Server新手。我有一个将数据加载到stage表中的批处理过程。那张桌子上有几把外键。我想转储加载到错误表时遇到的所有外键错误。我该怎么做

谢谢
一种新的新手方法是将数据加载到没有FK约束的临时表中,删除坏记录(违反FK约束),然后将数据从临时表移动到阶段表中。如果您的桌子上有很多FK,这可能会有点乏味,因此您可能希望自动化该过程

这里有一些伪代码来说明我的意思

    -- First put the raw data into MyTempTable

    -- Find the records that are "bad" -- you can SELECT INTO a "bad records" table
    -- for later inspection if you want...
    SELECT * 
    INTO #BadRecords
    FROM MyTempTable
    WHERE ForeignKeyIDColumn NOT IN
    (
        SELECT ID FROM ForeignKeyTable
    )
    -- Remove the bad records now
    DELETE
    FROM MyTempTable
    WHERE ForeignKeyIDColumn NOT IN
    (
        SELECT ID FROM ForeignKeyTable
    )
    -- Now the data is "clean" (won't violate the FK) so you can insert it 
    -- from MyTempTable into the stage table

一种方法是将数据加载到没有FK约束的临时表中,删除坏记录(违反FK约束),然后将数据从临时表移动到阶段表中。如果您的桌子上有很多FK,这可能会有点乏味,因此您可能希望自动化该过程

这里有一些伪代码来说明我的意思

    -- First put the raw data into MyTempTable

    -- Find the records that are "bad" -- you can SELECT INTO a "bad records" table
    -- for later inspection if you want...
    SELECT * 
    INTO #BadRecords
    FROM MyTempTable
    WHERE ForeignKeyIDColumn NOT IN
    (
        SELECT ID FROM ForeignKeyTable
    )
    -- Remove the bad records now
    DELETE
    FROM MyTempTable
    WHERE ForeignKeyIDColumn NOT IN
    (
        SELECT ID FROM ForeignKeyTable
    )
    -- Now the data is "clean" (won't violate the FK) so you can insert it 
    -- from MyTempTable into the stage table

使用SSI加载数据。验证失败的记录可以发送到异常表。

使用SSI加载数据。验证失败的记录可以发送到异常表。

请发布批处理。是否正在加载ISAM?如果您正在进行批处理,最好禁用约束,然后运行一个流程来查找冲突,将它们隔离在某种错误表中,然后强制执行约束。约束的全部目的是不允许插入违反的行。请发布批处理过程。是否正在加载ISAM?如果您正在进行批处理,最好禁用约束,然后运行一个流程来查找冲突,将它们隔离在某种错误表中,然后强制执行约束。约束的全部目的是不允许插入违反规则的行。