0

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

我正在从代码生成 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

PS 其他关系数据库引擎上的信息也会很有用,以防万一。

4

2 回答 2

1

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

于 2013-04-04T15:49:21.130 回答
1

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

于 2013-04-04T16:08:31.810 回答