外键约束-写入错误表-SQL Server 2008
我是SQL Server新手。我有一个将数据加载到stage表中的批处理过程。那张桌子上有几把外键。我想转储加载到错误表时遇到的所有外键错误。我该怎么做 谢谢外键约束-写入错误表-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
一种新的新手方法是将数据加载到没有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?如果您正在进行批处理,最好禁用约束,然后运行一个流程来查找冲突,将它们隔离在某种错误表中,然后强制执行约束。约束的全部目的是不允许插入违反规则的行。