我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL Server使用T-SQL语句批处理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL Server使用T-SQL语句批处理

批处理简介

批处理是作为一个逻辑单元的T-SQL语句。如果一条语句不能通过语法分析,那么不会运行任何语句。如果一条语句在运行时失败,那么产生错误的语句之前的语句都已经运行了。

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

GO语句的特点:

  • GO语句必须自成一行,只有注释可以再同一行上。
  • 它使得自脚本的开始部分或者最近一个GO语句以后的所有语句编译成一个执行计划并发送到服务器,与任何其他批处理无关。
  • GO语句不是T-SQL命令,而是由各种SQL Server命令实用程序(如:Management Studio中的"查询"窗口)识别的命令。

1、自成一行

GO命令应当自成一行。在技术上,可以在GO命令之后的同一行开始一个新的批处理,但是这会严重影响可读性。T-SQL语句不能放在GO语句之前,否则GO语句经常会被错误地理解,从而造成语法分析错误或产生一些不可预料的后果。例如,在WHERE子句之后使用一个GO语句。

SELECT * FROM Person WHERE Id = 100 GO

分析器就不知道如何处理。

消息 102,级别 15,状态 1,第 1 行
  'GO' 附近有语法错误。

2、每个批处理单独发送到服务器

因为每个批处理被单独地处理,所以一个批处理中的错误不会阻止另一个批处理运行。要说明这点,请看一下下面的代码。

SELECT 1/0
  GO
  SELECT 0/1

如果这些批处理之间没有任何依赖性,则每个批处理在运行时是完全自治的。

消息 8134,级别 16,状态 1,第 1 行
  遇到以零作除数错误。

  (1 行受影响)

如果这些批处理之间存在依赖性,那么错误发生之后的每个批处理都会失败。依赖性指的是后面的语句,依赖前面执行的结果或变量等等。  

3、GO不是T-SQL命令

一个常见的错误是认为GO是T-SQL命令,其实GO是一个只能被编辑工具(Management Studio)识别的命令。

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

批处理中错误

批处理中的错误分为以下两类:

  • 语法错误
  • 运行时错误

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

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

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

何时使用批处理

使用批处理有若干个理由,但是所有的批处理都有一个共同点-当脚本中的一些事情必须发生在另外一件事情之前或者分开发生时,需要使用批处理。

1.要求有自己的批处理的语句

有一些命令必须有他们自己的批处理。

  • CREATE DEFAULT
  • CREATE PROCEDURE
  • CREATE RULE
  • CREATE TRIGGER
  • CREATE VIEW

如果想在单个脚本中将这些语句中的任意一个和其他语句进行组合,那么需要通过使用GO语句将他们分散到各自的批处理中。

2、使用批处理建立优先权

当需要建立优先权时,就可能用到批处理。也就是说,在下一个任务开始之前,需要全部完成上一个任务。在大多数时候,SQL Server可以很好地处理这种情况 - 脚本中的第一条语句是首先执行的,并且脚本中的第二条语句可以依赖第二条语句运行时服务器所处的适当状态。

下面来看一个例子:

USE master

  CREATE DATABASE Test

  CREATE TABLE TestTable
  (
      col1 int,
      col2 int
  )

当执行上面的脚本,提示命令已成功完成。但是真的没问题吗?

当查看Test数据库时,发现表TestTable并不存在,反而master数据库里多了一个TestTable表。

为什么表被创建在了master数据库中,答案取决于当运行CREATE TABLE语句时,当前数据库是什么。在这个例子中,它恰好是master数据库,所以表就创建在该数据库中。

你可能以为将上述代码改成这样可能就能够解决:

CREATE DATABASE Test

  USE Test

  CREATE TABLE TestTable
  (
      col1 int,
      col2 int
  )

但很遗憾,并不能,错误信息如下:

消息 911,级别 16,状态 1,第 3 行
  数据库 'Test' 不存在。请确保正确地输入了该名称。

分析器尝试验证代码时,发现USE引用一个不存在的数据库,这是批处理语句不可或缺,正确的代码如下:

CREATE DATABASE Test
  GO  --此GO是两主角
  USE Test

  CREATE TABLE TestTable
  (
      col1 int,
      col2 int
  )

就这样加了一个GO之后,问题成功解决。

下面再来看一个例子:

USE Test
  ALTER TABLE TestTable
      ADD col3 int
  INSERT INTO TestTable
      (col1,col2,col3)
  VALUES
      (1,1,1)

以上代码在查询分析器中提示col3列不存在。实际上,以上代码也可以通过一个GO解决。

USE Test
  ALTER TABLE TestTable
      ADD col3 int
  GO  --先更改数据库,然发送插入,此时就是分开进行语法验证了
  INSERT INTO TestTable
      (col1,col2,col3)
  VALUES
      (1,1,1)

到此这篇关于SQL Server批处理T-SQL语句的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL Server使用T-SQL语句批处理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL Server怎么使用T-SQL语句批处理

本篇内容介绍了“SQL Server怎么使用T-SQL语句批处理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!批处理简介批处理是作为一个逻辑
2023-06-30

SQL Server在T-SQL语句中怎么使用变量

这篇文章主要介绍了SQL Server在T-SQL语句中怎么使用变量的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL Server在T-SQL语句中怎么使用变量文章都会有所收获,下面我们一起来看看吧。变量的
2023-06-30

如何使用BAT批处理执行sql语句

本篇内容介绍了“如何使用BAT批处理执行sql语句”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、把待执行Sql保存在一个文件,这里为20
2023-06-08

Sql server 中的bulk insert语句使用

在SQL Server中,BULK INSERT语句用于将数据从外部文件加载到表中。这可以用于快速导入大量数据。以下是BULK INSERT语句的语法:BULK INSERT 目标表FROM '数据文件路径'WITH(DATA_SOURCE
2023-09-15

记录sql server 的批量删除主外键的sql语句

select b.name TableName,a.name TypeName,a.* from sysobjects a inner join sysobjects b on a.parent_obj=b.id and b.xtype=‘U‘--删除约束
记录sql server 的批量删除主外键的sql语句
2021-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录