sql - SQL Server - 可以回滚 DDL 命令吗?
问题描述
我在堆栈溢出上发现了类似的查询,但无法找到确切的答案。
当我在 SQL Server 2012 上使用 drop 和 truncate 等 DDL 命令时,我能够回滚更改吗?理论上,我一直读到您可以回滚 DML 命令,但不能回滚 DDL,因为它们没有被记录。
我的问题是,是否也可以回滚 DDL 命令?或者这是导致它的 SSMS 中的某些特殊功能或设置更改。
Oracle 和 Postgres 等其他 SQL 平台呢?我们还可以在它们上回滚 DDL 命令吗?
解决方案
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。
推荐阅读
- c++ - 列出 const 和数组结构字段的初始化
- google-sheets - 用于多个变量的 Google 电子表格函数给出一个结果
- python - Pylint 无法在 mercurial 预提交挂钩上加载插件
- python - main() 接受 0 个位置参数,但给出了 2 个
- python - 以下逻辑在 Python 中做了什么?
- git - 设置 Git 全局变量
- android - 如何配置以便我可以从 GluonHQ 安装两个以上的应用程序 - JavaFX
- selenium-webdriver - 附加在范围报告中的屏幕截图未显示在 Bamboo 工件中,尽管它在本地工作正常
- arangodb - 是否可以在 arangodb 中事先不知道确切结构的情况下对所有属性进行索引?
- r - 当 annotate() 层的标签有下标时,ggsave() 不起作用