Sql 如果重复项不存在,则插入新行';不存在

Sql 如果重复项不存在,则插入新行';不存在,sql,sql-server,Sql,Sql Server,我有十几个新行需要插入到一个表中,这些新行不是来自另一个表。我还需要检查是否存在基于未使用任何约束的两列的重复项 目前我的解决方案是首先将这些行插入临时表,然后使用insert into[…]SELECT和WHERE子句,该子句使用NOT EXISTS 似乎必须有更好的方法来做到这一点,我正在寻找建议 (使用SQL Server 2012) 作为上下文,此用例是一个数据库迁移过程,其中需要插入行,迁移可能会运行多次,不能插入重复数据,也不能抛出唯一的约束冲突,因为这将结束迁移的执行。使用SQL

我有十几个新行需要插入到一个表中,这些新行不是来自另一个表。我还需要检查是否存在基于未使用任何约束的两列的重复项

目前我的解决方案是首先将这些行插入临时表,然后使用insert into[…]SELECT和WHERE子句,该子句使用NOT EXISTS

似乎必须有更好的方法来做到这一点,我正在寻找建议

(使用SQL Server 2012)


作为上下文,此用例是一个数据库迁移过程,其中需要插入行,迁移可能会运行多次,不能插入重复数据,也不能抛出唯一的约束冲突,因为这将结束迁移的执行。

使用SQL Server的,重复项将以静默方式失败。

使用SQL Server时,重复项将以静默方式失败。

我建议使用TSQL合并。它可以处理查找您的副本,并且仅当它是新记录时才插入。(不匹配时)条款


请参见

我建议使用TSQL合并。它可以处理查找您的副本,并且仅当它是新记录时才插入。(不匹配时)条款


请参见

您可以尝试使用合并子句,但我个人使用并且喜欢您当前使用的解决方案。我只是不使用临时表。正如Vulcronos所说,我只会使用您正在使用的方法,但删除临时表似乎是您流程中的一个额外步骤。下面是对您当前方法的另一次投票。它允许您更灵活地查看哪些行进入表中,哪些行没有进入表中。您可以尝试使用merge子句,但我个人使用并喜欢您当前使用的解决方案。我只是不使用临时表。正如Vulcronos所说,我只会使用您正在使用的方法,但删除临时表似乎是您流程中的一个额外步骤。下面是对您当前方法的另一次投票。它允许您更灵活地查看哪些行进入表中,哪些行没有进入表中。我仍然需要使用另一个表(无论是临时表还是其他表)来使用合并,对吗?@Moismyname是的,但是如果您处理的是一小部分行,那么表变量可能是最有效的。啊!出于某种原因,我从来没有想到过表变量。很好。我仍然需要使用另一个表(无论是临时表还是其他表)来使用合并,对吗?@Moismyname是的,但是如果您处理的是一小部分行,那么表变量可能是最有效的。啊!出于某种原因,我从来没有想到过表变量。打得好。