2011-11-21 44 views
0

我是SQL Server的新手。我有一个将数据加载到舞台表的批处理过程。我在桌子上有一些外键。我想转储加载到错误表时遇到的所有外键错误。我怎么做?外键约束 - 写入错误表 - SQL Server 2008

感谢 新新手

+1

请发布您的批处理。 – Paparazzi

+0

您正在加载ISAM吗?如果您正在进行批处理,最好禁用约束,然后运行一个进程来查找违规情况,将它们隔离在某种错误表中,然后强制执行约束。约束的全部目的是不让你插入违规行。 – Maess

回答

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 
2

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