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

问题描述:

我可以依靠SQL Server(和SQL Server Compact)一次对单个表执行多个ALTER TABLE查询,而不是在所有查询都在单一交易?在单个事务中的单个表上执行多个DDL查询

我从代码生成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.以防万一,其他关系数据库引擎的信息也会很有用。

它们将在事务内按顺序进行,对于事务之外的其他会话全有或全无。如果您担心性能问题,请考虑这样一个事实,即在表上执行DDL语句会在整个交易过程中锁定整个表,因此请勿在实时高流量表上执行此操作。

+0

为问题添加示例代码,使其不太模糊。 – Athari 2013-04-04 16:01:50

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