2013-04-04 75 views
0

我可以依靠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.以防萬一,其他關係數據庫引擎的信息也會很有用。

回答

1

它們將在事務內按順序進行,對於事務之外的其他會話全有或全無。如果您擔心性能問題,請考慮這樣一個事實,即在表上執行DDL語句會在整個交易過程中鎖定整個表,因此請勿在實時高流量表上執行此操作。

+0

爲問題添加示例代碼,使其不太模糊。 – Athari 2013-04-04 16:01:50

1

第二種情況原則上更可取,因爲它爲優化程序提供了進行業務的機會。特別是,數據字典很可能會被讀入和寫入,並且表空間的所有更改也將一次完成。但我懷疑只是通過添加ints,就像例子中那樣,它會產生很大的不同。肯定是特定於引擎的。