单个事务中单个表上的多个DDL查询

时间:2013-04-04 15:34:48

标签: sql sql-server transactions sql-server-ce alter-table

如果所有查询都在一个事务中,我是否可以依靠SQL Server(和SQL Server Compact)一次对单个表执行多个ALTER TABLE查询,而不是后续应用更改?

我正在从代码生成DML查询并希望简化代码,但我更愿意避免性能问题。

例如,此代码之间存在性能差异:

  BEGIN TRAN
  ALTER TABLE t ADD COLUMN a int
  ALTER TABLE t ADD COLUMN b int
  ALTER TABLE t ADD COLUMN c int
  COMMIT TRAN

和这段代码:

  BEGIN TRAN
  ALTER TABLE t ADD COLUMN a int
              , ADD COLUMN b int
              , ADD COLUMN c int
  COMMIT TRAN

P.S。有关其他关系数据库引擎的信息也是有用的,以防万一。

2 个答案:

答案 0 :(得分:1)

它们将在事务中顺序,对事务外的其他会话全有或全无。如果您担心性能,请考虑在表上执行DDL语句将在事务持续期间锁定整个表的事实,因此不要在实时高流量表上执行此操作。

答案 1 :(得分:1)

第二种情况原则上是优选的,因为它为优化者提供了开展业务的机会。特别是,数据字典很可能会被读取和写入一个,并且对表空间的所有更改也将一次完成。但我怀疑只是通过添加整数,就像在示例中一样,它会产生很大的不同。并且肯定是引擎特定的。