關於mssql中go等幾個關鍵字的用途及區別

sqysl發表於2009-04-18

今晚做了個簡單的實驗,以驗證幾個關鍵字的區別
1、GO是查詢分析器的命令,兩個GO之間作為一個批處理傳送給MSSQL,由MSSQL一起處理併產生一個執行計劃,它本身並不是MSSQL的命令,只是查詢分析器分隔批處理命令的標誌;
2、BEGIN...END,它是在編寫T-SQL程式時,根據程式需要而構成的一個邏輯程式段,這裡需要強調的是程式邏輯需要,其間的程式碼作為一個邏輯單元被MSSQL執行;
3、BEGIN TRAN...COMMIT(ROLLBACK)TRAN,它是顯示開始一個事務的語句,其間可以包含多個語句,這些語句構成一個事務,供MSSQL處理。那麼雖然我們明白這個概念,但他們有什麼區別呢?或者說他們在實際執行時,是否作為一個整體來執行呢?即要麼這些語句都成功,要麼都失敗?下面做個試驗看看。
首先,我測試了GO(環境MSSQL2005 DEVELOPMENT VERSION):
USE TEST1
GO
CREATE TABLE TEST1(AA VARCHAR(100))
CREATE TBLE TEST2(BB VARCHAR(100))    --此處故意產生一個錯誤,把table寫成了tble
GO
結果證明,GO...GO間的語句要麼都成功,要麼都不成功。
其次,測試BEGIN...END,測試環境同上。
USE TEST1
GO
BEGIN
    INSERT INTO TEST1 VALUES('AAAAAA')
    INSERT INT TEST2 VALUES('BBBBBBB')  --故意把INTO寫成了INT
END
結果,BEGIN...END間的語句要麼都成功,要麼都不成功。
再測試BEGIN TRAN...COMMIT(ROLLBACK) TRAN,環境和上面相同。
USE TEST1
GO
BEGIN TRAN T1
  DELETE FROM TEST1
  DLETE FROM TEST2    --故意把DELETE 寫成了DLETE
COMMIT TRAN T1
結果證明,BEGIN TRAN ...COMMIT(ROLLBACK) TRAN間的語句也是要麼成功,要麼都不成功,這點預先是知道的,因為事務的概念就是這樣,同時還做了如下實驗:
USE TEST1
GO
BEGIN
    BEGIN TRAN T1
        INSERT INTO TEST1 VALUSE('AAAAAA')
    COMMIT TRAN T1
    INSERT INO TEST2('BBBBBBB')    --故意把INTO寫成了INO
END

USE TEST1
GO
BEGIN
    BEGIN TRAN T1
         INSERT INO TEST1 VALUES('AAAAAA')    --故意把INTO 寫成INO
    END TRAN T1
    INSERT INTO TEST2 VALUES('BBBBBBB')
END
結果證明,BEGIN...END間的事務或語句要麼都成功,要麼都不成功。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8484829/viewspace-590899/,如需轉載,請註明出處,否則將追究法律責任。

相關文章