我创建了一个存储过程(sp),它通过select语句将行插入表中。
它插入数据库的所有表中包含的所有属性值。
在执行sp期间,其他属性被添加到表中,然后再次执行sp。
该过程应忽略主键的违规并添加最近添加的新属性。
当违反主键时,该过程不会插入任何行。
这可以在sql server中使用吗?
答案 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。
而是更改您的表以将标识列作为主键,并且将所有内容保持为相同以插入数据。