我想知道是否可以在一个事务内运行多个DDL语句。我对SQL Server特别感兴趣,尽管其他数据库(至少包括Oracle、PostgreSQL)的答案也可能很有意思。
我一直在执行一些“CREATE TABLE”和“CREATE VIEW”,用于创建表格,并且发现了一些不一致之处,我想知道DDL是否应该在事务内完成...
我可能可以将DDL移出事务,但我想找一些参考资料。我到目前为止找到的东西有:
- MSDN页面Database Engine中的隔离级别清楚地说明:在运行在快照隔离下的显式事务中,DDL操作受到限制——但我没有使用快照隔离,这应该会导致错误。
- 这可以被解释为DDL操作可以在不同隔离级别下的显式事务中执行吗?
- Oracle® Database Gateway for SQL Server User's Guide#DDL Statements指出,在给定事务中只能执行一个DDL语句——这也适用于直接使用的SQL Server吗?
针对Oracle:
- 在Stack Overflow问题Unit testing DDL statements that need to be in a transaction中说到Oracle对DDL语句进行隐式提交?(尽管没有引用)
如果有所作为,我是通过JTDS JDBC驱动程序使用Java进行操作的。
敬礼,Touko