• T-sql语句中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的结果

    ////////////////////////////////////////////

    1 注释

    单行注释:--

    多行注释:

    2 结束T-sql语句

    在每个命令后用分号“;”表示结束,但是分号是可选择的,不要也可以

    不要在try end 后面添加分号

    不要在 if 后面添加分号

    必须在get 之前添加分号

    3游标
    概念:游标实际上是用户在系统中开设的一个数据缓冲区,存放SQL语句的执行结果。
    游标的使用:游标中存放查询结果的一组记录,用户可以通过移动游标指针逐一访问记录,
                并赋给主变量,交由主语言进行进一步处理。
    使用游标的五个步骤:
    1,声明游标
    2,打开游标
    3,利用游标读取、修改或删除所取的行
    4,关闭游标
    5,释放游标

    4 字符串连接符+
    SELECT 'WQJFF'+'88KK'

    --while 语句
    declare @i int
    set @i = 1
     while @i <= 10
    begin
     print @i
     set @i=@i + 1
    end
     

    5 waitfor
    waitfor  delay '00:00:01'
    print '哈哈,现在是10点41'

    waitfor time '10:41'
    print '哈哈,现在是10点41'

    SELECT * FROM SYS.MESSAGES

    6 CHARINDEX
    CHARINDEX ( char1 ,string1 [ , start_location ] )
    char1  一个表达式,其中包含要查找的字符的序列。
    string1  一个表达式,通常是一个为指定序列搜索的列。string1 属于字符串数据类别。
    start_location  开始在 string1 中搜索 char1 时的字符位置。
    如果 start_location 未被指定、是一个负数或零,则将从 string1 的开头开始搜索。start_location 可以是 bigint 类型。
     string1 中包含 char1 时返回字符位置
     string1 中不包含 char1 时返回0

    SELECT CHARINDEX('Q','WQFDF')
    返回2
    SELECT CHARINDEX('WQFDF','Q')
    返回0

    如果 char1 或 string1 之一为 NULL,并且数据库兼容级别为 70 或更高,则 CHARINDEX 将返回 NULL。如果数据库兼容级别为 65 或更低,则 CHARINDEX 将仅在 char1 和 string1 都为 NULL 时才返回 NULL 值。
    SELECT CHARINDEX(NULL,'12345')
    返回NULL

    转至http://blog.sina.com.cn/s/blog_5623cddb0100ybbx.html

  • 相关阅读:
    【未完成】【oracle】add_months与add_days
    【java】[null]的问题
    PID控制算法研究
    matlab函数:residue和residuez的用法
    Windows入门基础:2.vs2013中Icon显示
    关于for()循环使用过程中遇到的问题(俄罗斯方块游戏中遇到的问题)
    Windows入门基础:1.关于CreateWindow()函数使用中遇到的问题
    error C4996: 'swprintf': swprintf has been changed to conform with the ISO C standard,set _CRT_NON_CONFORMING_SWPRINT
    QT5.3.2与VS2013 fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突_(解决方案)
    Java如何访问private变量
  • 原文地址:https://www.cnblogs.com/keepSmile/p/4738685.html
Copyright © 2020-2023  润新知