INSERT INTO语句的预处理验证

时间:2014-02-21 10:27:03

标签: sql sql-server sql-server-2008

我有一个使用动态SQL创建许多INSERT INTO语句的存储过程。我无法控制我尝试插入的数据,并且插入的值是从

派生的
SELECT * FROM sourceTable

有时,插入时会触发外键约束(数据从环境A中获取并插入到环境B中,因此某些其他表可能未保持更新)

我的问题是 - 有没有办法在执行任何错误(外键约束或其他)之前预处理所有INSERT语句?或者我是否需要创建检查点并使用回滚功能?

---流程概述

我们根据选择标准

在包含数据子集的环境A(源)上创建表

使用SQL导出向导,这些表将复制到环境B(目标)

运行存储过程以将这些表中的数据导入到相应的表中    环境B上的表。此sp在包含所有表名

的动态SQL循环中使用INSERT INTO tableA SELECT * FROM tableAFromSource命令

由于我们无法控制的外部因素(服务器无法链接,数据结构,服务器权限等),因此使用此方法

1 个答案:

答案 0 :(得分:-1)

我不知道任何类型的预处理会检查任何给定查询的结果,但使用普通T-SQL检查条件通常很容易。如果您只是想避免违反主键约束,可以使用您提供的查询的以下变体(考虑Id主键):

INSERT INTO tableA
SELECT *
FROM tableAFromSource src
WHERE src.Id NOT IN ( SELECT tba.Id FROM tableA tba );