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

时间:2011-11-21 19:35:28

标签: sql sql-server-2008

我是SQL Server新手。我有一个Batch进程,可以将数据加载到我的stage表中。我在桌子上有一些外键。我想转储加载到错误表时遇到的所有外键错误。我该怎么做?

由于 新手

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

一种方法是将数据加载到没有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