【问题标题】:SQL : Delete And Insert In One Stored ProcedureSQL:在一个存储过程中删除和插入
【发布时间】:2015-01-20 06:25:06
【问题描述】:

我希望删除查询在开始时只执行一次。在执行插入语句之后,直到所有数据成功保存在数据库中。

【问题讨论】:

  • 什么数据库?? SQL 只是许多数据库系统使用的查询语言——但它们在处理事物的方式上都略有不同——尤其是像存储过程这样的事物。请在您的问题中添加相关标签(oraclemysqlsql-serverdb2postgresql)!

标签: sql sql-server stored-procedures sql-update sql-delete


【解决方案1】:

尝试使用 MERGE 语句

-- 正确指定连接条件的 MERGE 语句。

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 

【讨论】:

  • 我想在单个表上执行删除和插入。先删除table1中的所有行,然后执行insert
  • Merge 会解决这个问题。无论您要插入什么,都将其放入临时表中,并将其视为源,将要更新的表视为目标。因此,如果您将 3 行放入临时表(源表)中,它将插入这三行并删除目标表中的其余部分
猜你喜欢
  • 2019-08-10
  • 1970-01-01
  • 2014-06-23
  • 2016-09-11
  • 2013-11-07
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多