Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当源表没有外键约束时,如何避免在目标表中插入重复记录_Sql_Sql Server - Fatal编程技术网

Sql 当源表没有外键约束时,如何避免在目标表中插入重复记录

Sql 当源表没有外键约束时,如何避免在目标表中插入重复记录,sql,sql-server,Sql,Sql Server,通过映射和检查条件,我们通常可以使用合并查询/连接查询来避免重复插入目标表。但是我们如何在没有外键约束的情况下处理以避免重复插入呢 表A-目标表 +--------+--------+-----------+-----------+------------+ | Id | RecNo | Name | Salary | Date | +--------+--------+-----------+-----------+------------+ |anyGu

通过映射和检查条件,我们通常可以使用合并查询/连接查询来避免重复插入目标表。但是我们如何在没有外键约束的情况下处理以避免重复插入呢

表A-目标表

+--------+--------+-----------+-----------+------------+
|  Id    | RecNo  |   Name    |   Salary  |  Date      |
+--------+--------+-----------+-----------+------------+
|anyGuid |Guid1   | Name1     |  10000    | 19-07-2015 |
|anyGuid |Guid2   | Name2     |  20000    | 20-07-2015 |
|anyGuid |Guid3   | Name3     |  30000    | 19-07-2015 |
+--------+--------+-----------+-----------+------------+
表B-源温度表

+--------+--------+-----------+------------+
| RecNo  | Name   | Salary    | Date       |
+--------+--------+-----------+------------+
|Guid3   |Name3   | 30000     | 19-07-2015 |
|Guid4   |Name4   | 40000     | 20-07-2015 |
|Guid5   |Name5   | 40000     | 21-07-2105 |
+--------+--------+-----------+------------+
现在,我需要将
TableB
中的所有行插入
TableA
目标表,但它不应该插入
TableA
中已经存在的行

示例:不应将源表B的第一条记录插入表A

注意:表A和表B之间没有外键

我们怎样才能巧妙地处理这个案子?请给我一些建议

INSERT INTO TableA (ID, RecNo, Salary, [Date])
SELECT  RecNo, Name, Salary, [Date]
FROM TableB B 
WHERE NOT EXISTS (SELECT 1 
                  FROM TableA 
                  WHERE B.Name = RecNo)
这假设RecNo提供唯一性。左外部联接将匹配两个表之间具有相同RecNo的记录,where条件(a.RecNo为NULL)将查找TableB中不存在于TableA中的记录


这假设RecNo提供唯一性。左侧外部联接将匹配两个表之间具有相同RecNo的记录,where条件(a.RecNo为NULL)将查找表B中不存在于表a中的记录。

为什么不添加外键?听起来你无论如何都想强制执行它,为什么不把它添加到你的系统中呢?这就是它们存在的原因。为什么不添加外键呢?听起来你无论如何都想强制执行它,为什么不把它添加到你的系统中呢?这就是它们存在的原因。
INSERT INTO TableA (RecNo, Name, Salary, Date)
SELECT b.RecNo, b.Name, b.Salary, d.Date
FROM TableB b
LEFT OUTER JOIN TableA a ON a.RecNo = b.RecNo
WHERE a.RecNo IS NULL