首页 > 解决方案 > SQL Server - 可以回滚 DDL 命令吗?

问题描述

我在堆栈溢出上发现了类似的查询,但无法找到确切的答案。

当我在 SQL Server 2012 上使用 drop 和 truncate 等 DDL 命令时,我能够回滚更改吗?理论上,我一直读到您可以回滚 DML 命令,但不能回滚 DDL,因为它们没有被记录。

我的问题是,是否也可以回滚 DDL 命令?或者这是导致它的 SSMS 中的某些特殊功能或设置更改。

Oracle 和 Postgres 等其他 SQL 平台呢?我们还可以在它们上回滚 DDL 命令吗?

标签: sqlsql-serverddlrollback

解决方案


DDL 回滚。

例子:

BEGIN TRANSACTION

CREATE TABLE a ( Id INT NOT NULL )

SELECT * FROM a -- returns an empty row

ROLLBACK TRANSACTION

SELECT * FROM a -- throws an error, object does not exist

出于这个确切原因,我总是在事务中包含我的 CREATE、ALTER、DROP 和 TRUNCATE。这样,如果有错误,我不会得到一些对象,但不会得到其他对象。测试您有疑问的 DDL。


推荐阅读