ITPub博客

首页 > 数据库 > SQL Server > 关于mssql中go等几个关键字的用途及区别

关于mssql中go等几个关键字的用途及区别

原创 SQL Server 作者:sqysl 时间:2009-04-18 20:07:50 0 删除 编辑

今晚做了个简单的实验,以验证几个关键字的区别
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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 网友的TOP资料
请登录后发表评论 登录
全部评论
上世纪90年代初至今,一直专注于数据库应用及研究,擅长数据库优化及设计等。http://blog.itpub.net/8484829;https://blog.csdn.net/tuning_optmization;https://www.cnblogs.com/lhdz_bj/

注册时间:2008-06-27

  • 博文量
    356
  • 访问量
    559907