T-SQL:GO语句和批处理(更新ing)

自己的理解:用GO隔开,就相当于在不同的查询窗口里执行SQL,GO需要单独提交事务的

整理时参考博文:

http://www.cnblogs.com/kissdodog/p/3163880.html

http://lockrock.blog.51cto.com/2147255/775783

批处理是作为一个逻辑单元的T-SQL语句。完整的批处理当中,如果第一条语句不能通过语法分析,那么不会运行任何语句。语句会顺序执行,如果执行过程中发现一条语句存在错误,那么会在运行时报错,但在产生错误的语句之前,没有语法错误的语句都已经运行了。

为了将一个脚本分为多个批处理,可使用GO语句:

GO语句必须自成一行,只有注释可以在同一行上;

USE [AdventureWorks2008R2]
SELECT * FROM Person.Person WHERE BusinessEntityID = 20 GO

这种情况是会报错的。

被GO语句隔开的所有SQL语句会被编译成一个执行计划并发送到服务器,与任何其他批处理无关,每个批处理单独发送到服务器,这样在执行的过程中,因为每个批处理被单独地处理,所以一个批处理中的错误不会阻止另一个批处理运行;

SELECT 1/0
GO
SELECT 0/1

这种情况就第一句会报错,第二句则正常返回结果,如果这些批处理之间存在依赖性,那么错误发生之后的每个批处理都会失败。依赖性指的是后面的语句,依赖前面执行的结果或变量等等。

一个常见的错误是认为GO是T-SQL命令,其实GO是一个只能被编辑工具(Management Studio)识别的命令。如果使用第三方客户端工具连接MSSQLSERVER是不能使用的。

当编辑工具遇到GO语句时,会将GO语句看做一个终止批处理的标记,将其打包,并且作为一个独立的单元发送到服务器,不包括GO。因为服务器本身根本不知道GO是什么意思。

案例:

BEGIN
TRUNCATE TABLE [TABLETEST]GO
END

包裹在其中的语句是表示一个完整的批处理,此时用GO隔开是会报错的

批处理中的错误分为以下两类:1、语法错误2、运行时错误

语法错误,一般在执行前使用分析就可以查出:如果查询分析器发现一个语法错误,那么批处理的处理过程会被立即取消。因为语法检查发生在批处理编译或者执行之前,所以在语法检查期间的一个失败意味着还没有批处理被执行-不管语法错误发生在批处理中的什么位置:

CREATE DATABASE Test
USE Test

这样分析是不会通过的,执行的时候一句也不会被执行,但是在两句之间加入GO之后,虽然分析还是会报错,但实际执行是可以正常执行的;

如果不加入GO,则是会直接提示数据库不存在。

运行时错误的工作方式有很大不同,这种情况分析是不会报错的,只有在运行的过程中遇到错误才会终止,因为任何在遇到运行时错误之前执行的语句已经完成了,所以除非是未提交事务的一部分,否则这些语句所做的任何事情都已经是现实了。

一般而言,运行时错误将终止从错误发生的地方到此批处理末端的批处理的执行。下一个批处理不影响。

时间: 2024-11-12 04:05:18

T-SQL:GO语句和批处理(更新ing)的相关文章

sql/mysql 语句实例(陆续更新...)

表t_alibaba_data的数据结构如下: 各列含义分别是: 用户id(user_id),品牌id(brand_id),用户行为(type, 其中,点击为0,购买为1,加入收藏为2,加入购物车为3),产生行为的时间(visit_datetime). 一.用一条sql语句,找出点击过热销品牌(Top10)的用户 select distinct user_id from t_alibaba_data where type = 0 and brand_id in (select brand_id

SQL常用语句集合(不断更新)

1.多条件 查询 上下级 所有数据 select * from OrgUnit where (ParentId = '3' or OrgId='3' or ParentId in (select OrgId from OrgUnit where ParentId='3')) 2.相同列数的 多个查询结果 组合(union all) select a,b,c from table1 union all select ca,cb,cc from table2 3.左外连接 与 右外连接 (left

SQL UPDATE 语句:更新表中的记录语法及案例剖析

SQL UPDATE 语句 UPDATE 语句用于更新表中的记录. SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录. SQL UPDATE 语法 UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value; 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新.如果您省略了 WHERE 子句,所有的记录都将被

(转)经典SQL查询语句大全

一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat' --- 开始 备份 BACKUP DATABASE pubs TO testBack 4.说明:创建

经典SQL查询语句大全

一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack4.说明:创建新表create ta

SQL查询语句大全(转)

转自https://www.cnblogs.com/chenglc/p/8421492.html 重点参考https://blog.csdn.net/g1418377085/article/details/77504076/ 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevi

Hibernate 关于执行sql查询语句(转)

原文  http://www.yshjava.cn/post/543.html 主题 SQLHibernate Hibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的.通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类--SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询: session.creat

SQL join语句

——转载 假设我们有下面两张表.表A在左边,表B在右边.我们给它们各四条记录. 1 2 3 4 5 6 id name       id  name -- ----       --  ---- 1  Pirate     1   Rutabaga 2  Monkey     2   Pirate 3  Ninja      3   Darth Vader 4  Spaghetti  4   Ninja 我们用过name字段用几种不同方式把这些表联合起来,看能否得到和那些漂亮的韦恩图在概念上的匹

SQL 常用语句

–-表现最差的前10名使用查询 SELECT TOP 10 ProcedureName = t.text, ExecutionCount = s.execution_count, AvgExecutionTime = isnull ( s.total_elapsed_time / s.execution_count, 0 ), AvgWorkerTime = s.total_worker_time / s.execution_count, TotalWorkerTime = s.total_wo

SQL常用语句积累

SQL 常用语句积累: 一. SQL 基本语句 SQL 分类: DDL -数据定义语言 (Create , Alter , Drop , DECLARE) DML -数据操纵语言 (Select , Delete , Update , Insert) DCL -数据控制语言 (GRANT , REVOKE , COMMIT , ROLLBACK) 首先 , 简要介绍基础语句: 1 .说明:创建数据库 Create DATABASE database-name 2 .说明:删除数据库 drop d