zoukankan      html  css  js  c++  java
  • 检索08- SQL语句中的go与use用法

    • GO

    1. 作用:
    向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.
    2. 语法:
    一批 Transact-SQL 语句
    GO

    Select 1
    Select 2
    Select 3
    GO
    3. 说明:
    1) GO 不是 Transact-SQL 语句;
    2) 它是 sqlcmd 和 osql 实用工具以及 SQL Server Management Studio 代码编辑器识别的命令.
    3) SQL Server 应用程序可以将多个 Transact-SQL 语句作为一个批发送到 SQL Server 的实例来执行.然后,该批中的语句被编译成一个执行计划.程序员在 SQL Server 实用工具中执行特殊语句,或生成 Transact-SQL 语句的脚本在 SQL Server 实用工具中运行时,使用 GO 作为批结束的信号.
    4) 如果基于 ODBC 或 OLE DB API 的应用程序试图执行 GO 命令,会收到语法错误.SQL Server 实用工具从不向服务器发送 GO 命令.
    4. 权限:
    GO 是一个不需任何权限的实用工具命令.它可以由任何用户执行.
    5. 用法:
    1) SQL Server 实用工具将 GO 解释为应该向 SQL Server 实例发送当前批 Transact-SQL 语句的信号.当前批语句由上一 GO 命令后输入的所有语句组成,如果是第一条 GO 命令,则由即席会话或脚本开始后输入的所有语句组成.
    Select 1
    Select 2
    Select 3
    GO
    —这是一个批

    Select 1
    GO
    Select 2
    GO
    —这是两个批
    2) GO 命令和 Transact-SQL 语句不能在同一行中.但在 GO 命令行中可包含注释.
    Select 1
    GO
    --会正确输出结果,列名为”无列名”

    Select 1 GO

    --会正确输出结果,列名为”GO”
    --由此可知此处的GO并未起到应有的作用;
    3) 用户必须遵照使用批处理的规则.例如,在同一批处理中,创建数据库之后不能直接使用其新建的数据库.局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用.
    create database [Roc]
    use [Roc]
    GO
    --运行此批处理后,系统会报错
    --把此批处理分成两个批即可正确运行


    create database [Roc]
    GO
    use [Roc]
    GO declare @Roc varchar(max)
    Select @Roc = 'aking'
    GO
    print @Roc
    GO
    --此为两个批处理,由于局部变量的作用域要限制在一个批处理中,所以此语句错误
    --把这两个批合并为一个批即可正确运行
    declare @Roc varchar(max)
    Select @Roc = 'aking'
    print @Roc
    GO
    4) 不同批处理是分开执行的,一个查询失败不会影响另外一个查询.
    Select * from 不存在的表
    Select 1
    --查询执行后会报错,并且不返回任何结果

    Select * from 不存在的表
    GO
    Select 1
    GO
    --查询执行会会报错,但会返回Select 1的结果
    5) GO [count] count 为正整数.指定GO 之前的批处理执行指定的次数.
    insert [Roc] Select 'aking'
    GO
    --批处理执行1次,向表Roc中插入一行记录

    aking Insert [Roc] Select 'aking'
    GO 10
    --批处理执行10次,向表Roc中插入10行记录aking

    6. 补充:
    Select 1
    Select * from 不存在的表
    Select 3
    --查询结果会报错,但会返回Select 1的结果

    Select * from 不存在的表
    Select 1
    Select 3
    --查询结果会报错,且不会返回任何查询的结果

    Select 1
    Select * from 不存在的表
    Selec 3
    --查询结果会报错,且不会返回任何查询的结果,因为第三条查询语法错误;


    Select 1
    Select * from 不存在的表
    GO
    Select 3
    GO
    --查询结果会报错,但会返回Select 1 和Select 3的查询结果

    Select * from 不存在的表
    GO
    Select 1
    Select 3
    GO
    --查询结果会报错,但会返回Select 1 和Select 3的查询结果

    Select 1
    Select * from 不存在的表
    GO
    Selec 3
    GO
    --查询结果会报错,但会返回Select 1的结果


    • USE

    USE

    改变当前操作数据库


    用法:
    USE 数据库名

    例:
    CREATE DATABASE XX1 --创建XX1数据库
    ………………
    GO
    CREATE DATABASE XX2 --创建XX2数据库
    ………………
    GO
    USE XX1 --转到XX1数据库
    GO
    ………… --对XX1数据库的操作
    GO
    USE XX2 --转到XX2数据库
    GO
    ………… --对XX2数据库的操作
    GO

    USE在存储过程中不能直接使用
    但可以这样用:  
      create proc test  
      as  
      exec('use pubs select * from jobs')  --或者exec(use pubs) exec sp_adduser 'xxxx'
      go  

    --使用Exec(ute)语句配合USE来改变当前数据库,但数据库环境的更改只在Execute语句结束前有效,所以必须把后面的语句和Execute放到一起

    (转自 http://blog.sina.com.cn/s/blog_5623cddb0100ybbx.html  http://blog.csdn.net/nphyez/article/details/41939915  )

  • 相关阅读:
    半导体质量管理_Stargate
    半导体质量管理_eCAP LineWorks SPACE eCAP(电子OCAP)
    半导体质量管理_SQM 供应商质量管理
    半导体质量管理(LineWorks)_SPACE(统计过程分析和控制环境)
    计算机架构(层的由来)
    三层网络结构(客户端,应用服务层,数据源层)
    Navigator对象
    为什么大型互联网都需要网关服务?
    igate(因特网网关)
    [分享] SDK 2018.3烧写没有DDR的单板的Flash
  • 原文地址:https://www.cnblogs.com/whytohow/p/4734679.html
Copyright © 2011-2022 走看看