今晚做了个简单的实验,以验证几个关键字的区别
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博客 ” ,链接:https://blog.itpub.net/8484829/viewspace-590899/
,如需转载,请注明出处,否则将追究法律责任。