在sql server中插入时处理违反PRIMARY KEY的操作

时间:2014-11-28 09:25:31

标签: sql sql-server sql-server-2012

我创建了一个存储过程(sp),它通过select语句将行插入表中。

它插入数据库的所有表中包含的所有属性值。

在执行sp期间,其他属性被添加到表中,然后再次执行sp。

该过程应忽略主键的违规并添加最近添加的新属性。

当违反主键时,该过程不会插入任何行。

这可以在sql server中使用吗?

2 个答案:

答案 0 :(得分:0)

使用合并

-- MERGE statement with the join conditions specified correctly.
USE tempdb;
GO 
BEGIN TRAN;
MERGE Target AS T
USING Source AS S ON (T.EmployeeID = S.EmployeeID)  WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName)
WHEN MATCHED 
THEN UPDATE SET T.EmployeeName = S.EmployeeName
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%'
THEN DELETE 
OUTPUT $action, inserted.*, deleted.*;
ROLLBACK TRAN;
GO

详情请参阅URL

答案 1 :(得分:0)

无法在主键列中插入相同的ID。

而是更改您的表以将标识列作为主键,并且将所有内容保持为相同以插入数据。