SQL语言按照用途可以分为如下3类:

①DDL(Data Definition Language)  数据定义语言:

定义修改和删除数据库、表、索引和视图等

②DML(Data Manipulation Language)  数据处理语言:

对数据进行查询(SELECT)、插入(INSERT)、删除(DELETE)、更新(UPDATE)等

③DCL(Data Control Language)  数据控制语言:

对数据库对象的权限管理和事务管理

一、T-SQL语法基础

1.标识符

在SQL Server中,标识符就是指用来定义服务器、数据库、数据库对象和变量等的名称。
 
①.常规标识符
 
常规标识符是指符合标识符的格式规则不需要使用分隔符进行分隔的标识符。
标识符的格式规则,如:

Select * from book where bname=“C程序”

中的book和bname。

 
命名规则:
 
1)第一个字符:字母、_、@和#
2)后续字符可以是字母、数字、@、$、#或_
3)标识符不可以是保留字
4)不允许嵌入空格或其他特殊字符
5)字符数在1-128之间。
 
特殊意义的标识符:
 
1)以@开始的标识符表示局部变量
2)以@@开始的标识符表示全局变量
3)以#开始的标识符表示临时表或过程
4)以##开始的标识符表示全局临时对象  
 
②. 分隔标识符
 
分隔标识符在下列情况下使用:
当在对象名称或对象名称的组成部分中使用保留字时
当使用未被列为合法标识符的字符时
 
T-SQL使用的两种分隔符:
 
1)双引号(”)。(当QUOTED_IDENTIFIER设为ON时有效)

例如:   SELECT * FROM " My Table "

2)方括号([ ])。

例如:   SELECT * FROM [My Table]

分隔标识符的格式规则
 

2.常量

常量是指在程序运行过程中值始终不变的值。

3.变量

在SQL Server中,变量分为局部变量和全局变量

1)局部变量

前面有一个@字符,由用户定义和使用。

2)全局变量

名称前面有两个@字符,由系统定义和维护。

1) 局部变量
局部变量由用户定义,仅在声明它的批处理、存储过程或者触发器中有效。
局部变量的定义:

DECLARE { @local_variable data_type }[,...n]

注:变量不能是text、ntext或image数据类型
例: DECLARE @grade int,@sex char(2) 
 
给变量赋值,可用set或select语句,如:
Set @local_variable=expression
Select {@local_variable=expression} [,…n]

例如:

  DECLARE  @grade int,@sex char(2)
set @grade=60
select @sex='女‘
select @grade, @sex
2)全局变量
 
全局变量记录了SQL Server的各种状态信息,它们不能被显示地赋值或声明,而且不能被用户定义。
 
 

4.运算符

运算符是一种符号,用来指定要在一个或多个表达式中执行的操作。

SQL Server提供的运算符:算术运算符,赋值运算符,按位运算符,比较运算符,逻辑运算符,字符串运算符,一元运算符
 
赋值运算符:   =
算术运算符:  +    -    *    /    %
字符串连接运算符: +
比较运算符:  >   <   =   >=   <=   !=   <>   !<   !>
逻辑运算符: NOT     AND      OR      BETWEEN    EXISTS   IN        LIKE      SOME     ANY     ALL
一元运算符:+ 正      -负      ~位反
按位运算符:  & 按位与    |按位或    ^按位异或
 

运算符优先级:

+(正)、-(负)、~(按位NOT)

*、/、%

+(加)、+(连接)、-(减)

=、>、<、>=、<=、<>、!=、!>、!<

^(按位异或)、&(按位与)、|(按位或)

NOT

AND

ALL、ANY、BETWEEN、IN、LIKE、OR、

=(赋值)

5.流程控制语句

控制流语句是用来控制程序执行流程的语句,使用控制流语句可以在程序中组织语句的执行流程,提高编程语言的处理能力。

T-SQL提供控制流关键字,用于控制语句、语句块和存储过程的执行流。

控制流语句

说明

BEGIN…END

定义语句块

IF…ELSE

条件处理语句,如果条件成立,执行IF语句;

否则执行ELSE语句

CASE

分支语句

WHILE

循环语句

GOTO

无条件跳转语句

RETURN

无条件退出语句

WAITFOR

延迟语句

BREAK

跳出循环语句

CONTINUE

重新开始循环语句

① BEGIN…END语句

BEGIN…END语句用于将多个Transact-SQL语句组合为一个逻辑块。

语法格式为:

BEGIN

{

sql语句|语句块

}

END

下面几种情况经常要用到BEGIN和END语句:
WHILE循环需要包含语句块。
CASE语句的分支包含语句块。

IF或ELSE子句需要包含语句块。

② IF…ELSE语句

使用IF…ELSE语句,可以有条件地执行语句。其语法格式如下:

IF Boolean_expression

{sql语句|语句块}

[ELSE

{sql语句|语句块}]

③CASE语句
 
使用CASE语句可以进行多个分支的选择。CASE具有两种格式:
简单CASE格式:将某个表达式与一组表达式进行比较以确定结果。
搜索CASE格式:计算一组布尔表达式以确定结果。
注: CASE语句只能用于SQL语句的一部分,不能独立成句。

1)简单CASE格式

其语法格式如下:

CASE input_expression

WHEN when_expression THEN result_expression

[…n]

[ELSE else_result_expression]

END

注: input_expression和每个when_expression的数据类型必须相同或隐形转换。

如果未找到匹配值,也没有else子句,则返回null。

2)搜索CASE格式

其语法格式如下:

CASE

WHEN Boolean_expression THEN result_expression

[…n]

[ELSE else_result_expression]

END

注:如果Boolean_expression表达式的值为true,则返回then后的表达式,然后跳出case语句。

④ WHILE语句

WHILE语句可以重复执行若干SQL语句。

其语法格式如下:

WHILE Boolean_expression

{sql语句|语句块}

[BREAK]

{sql语句|语句块}

[CONTINUE]

⑤GOTO语句

GOTO语句可以实现无条件的跳转。其语法格式为:

GOTO lable

⑥ RETURN语句

使用RETURN语句,可以从查询或过程中无条件退出。可在任何时候用于从过程、批处理或语句块中退出,而不执行位于RETURN之后的语句。
语法格式为:

RETURN  [integer_expression]

其中:integer_expression为一个整数值,是return语句要返回的值。

⑦ WAITFOR语句

使用WAITFOR语句,可以在指定的时间或者过了一定时间后,执行语句块、存储过程或者事务。
其语法格式为:

WAITFOR {DELAY 'time' | TIME 'time'}

⑧try…catch语句

实现错误处理功能。
其语法格式为:

Begin try

{sql_statement|sql_block}

End try

Begin catch

{sql_statement|sql_block}

End catch

6.注释

 
SQL Server的两种注释字符:
①  --(双连字符)

这些注释字符可与要执行的代码处在同一行,也可另起一行。从双连字符开始到行尾均为注释。

②  /*…*/(正斜杠-星号对)  

从开始注释对(/*)到结束注释对(*/)之间的全部内容均视为注释部分。可对多行注释。

7.游标的使用

游标包括以下两个部分:
 
①游标结果集

 定义该游标的SELECT语句返回的行的集合。

②游标位置

 指向这个集合中某一行的指针。

游标的典型使用过程 :

1) 声明游标

声明游标使用DECLARE CURSOR语句,格式如下:

DECLARE cursor_name [ SCROLL ] CURSOR

FOR select_statement

[ FOR { READ ONLY | UPDATE [ OF column_name [ , …n ] ] } ]

其中:
cursor_name:所定义游标名称。
SCROLL:指定所有的提取选项(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未指定 SCROLL,默认 NEXT。
lselect_statement:是定义游标结果集的标准 SELECT 语句。
UPDATE [OF column_name [,...n]]:定义游标内可更新的列。如果指定 OF column_name [,...n] 参数,则只允许修改所列出的列。如果在 UPDATE 中未指定列的列表,则可以更新所有列。
 
2) 打开游标

打开游标使用OPEN语句,其语法格式如下:

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

其中:

GLOBAL:指定 cursor_name 为全局游标。
cursor_name:已声明的游标的名称。如果全局游标和局部游标都使用 cursor_name 作为其名称,那么如果指定了 GLOBAL,cursor_name 指的是全局游标,否则 cursor_name 指的是局部游标。
cursor_variable_name:游标变量的名称,该名称引用一个游标。
 
3)从打开的游标中提取行
格式:

FETCH [ [ NEXT | PRIOR | FIRST | LAST

| ABSOLUTE { n | @nvar }

| RELATIVE { n | @nvar }

]

FROM

]

{ { [ GLOBAL ] cursor_name } | @cursor_variable_name }

[ INTO @variable_name [ , …n ] ]

其中:
NEXT:返回紧跟当前行之后的结果行。
PRIOR:返回紧临当前行前面的结果行。
FIRST:返回游标中的第一行并将其作为当前行。
LAST:返回游标中的最后一行并将其作为当前行。
ABSOLUTE {n | @nvar}:如果 n 或 @nvar 为正数,返回从游标头开始的第 n 行并将返回的行变成新的当前行。如果 n 或 @nvar 为负数,返回游标尾之前的第 n 行并将返回的行变成新的当前行。如果 n 或 @nvar 为 0,则没有行返回。
RELATIVE {n | @nvar}:如果 n 或 @nvar 为正数,返回当前行之后的第 n 行并将返回的行变成新的当前行。如果 n 或 @nvar 为负数,返回当前行之前的第 n 行并将返回的行变成新的当前行。如果 n 或 @nvar 为 0,返回当前行。
GLOBAL:指定 cursor_name 指的是全局游标。
cursor_name:要从中进行提取的开放游标的名称。
@cursor_variable_name:游标变量名,引用要进行提取操作的打开的游标。
INTO @variable_name[,...n]:允许将提取操作的列数据放到局部变量中。
 

@@FETCH_STATUS()函数

 该函数报告上一个FETCH语句的状态,其取值和含义如表所示。

取值

含义

0

FETCH语句成功

-1

FETCH语句失败或此行不在结果集中

-2

被提取的行不存在

@@ROWCOUNT 全局变量

用来提供游标活动信息,它返回受上一语句影响的行数。

4)关闭游标

关闭游标使用CLOSE语句,其语法格式如下:

CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }

5) 释放游标
释放游标将释放所有分配给此游标的资源。格式为:

DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

sql server T-SQL 基础的更多相关文章

  1. .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载

    223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...

  2. 【SQL Server】SQL触发器经验详解

    [SQL Server]SQL触发器经验详解 | 浏览: 4314 | 更新: 2013-01-07 15:33 25 11 全文阅读分步阅读   加入杂志 步骤 1 2 3 4 5 6 7 8   ...

  3. SQL Server经典sql语句大全(转)

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  4. PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法

    逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...

  5. [Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

    原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin  update  某个sqlserver的表@dblink名字 .... ...

  6. (转)[SQL Server] 动态sql给变量赋值(或返回值给变量)

    本文转载自:http://blog.csdn.net/xiaoxu0123/article/details/5684680 [SQL Server] 动态sql给变量赋值(或返回值给变量) decla ...

  7. SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件

    原文:SQL Server 2008 /SQL Server 2008 R2 配置数据库邮件 从2005开始,就引入了"数据库邮件"功能.并且取代SQLMail.原有SQLMail ...

  8. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  9. sql server 与 sql server compact 互相数据导入

    从SQL Server 导出数据到 Sql Compact 使用 Sql Server Compact Tool box 从SQL Server Comapct 导出数据到  Sql Server 使 ...

  10. SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005

    New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differen ...

随机推荐

  1. 魔改——MDI多视图模板Tab/标签页 初始化/操作控件

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. 读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存

    微软的Windows提供了三种机制对内存进行操控 1 虚拟内存(最适合管理大型对象数组或大型结构数组) 2 内存映射文件(大型数据流/文件,共享数据) 3  堆(大量的小型对象) 预订地址空间区域Vi ...

  3. java String部分源码解析

    String类型的成员变量 /** String的属性值 */ private final char value[]; /** The offset is the first index of the ...

  4. 初识zookeeper(一)之zookeeper的安装及配置

    1.简要介绍 zookeeper是一个分布式的应用程序协调服务,是Hadoop和Hbase的重要组件,是一个树型的目录服务,支持变更推送.除此还可以用作dubbo服务的注册中心. 2.安装 2.1 下 ...

  5. Appium路线图及1.0正式版发布

    Appium更新的速度极快,从我试用时候的0.12到1.0(0.18版本后就是1.0),完全符合移动互联网的节奏. 更新可能会慢,可以多试几次 整理了testerhome上思寒发表的帖子,让我们来看下 ...

  6. UVALive 6263 The Dragon and the knights --统计,直线分平面

    题意:给n条直线,将一个平面分成很多个部分,再给m个骑士的坐标,在一个部分内只要有一个骑士即可保护该部分,问给出的m个骑士是不是保护了所有部分. 解法:计算每个骑士与每条直线的位置关系(上面还是下面) ...

  7. HDU 1878 欧拉回路

    并查集水题. 一个图存在欧拉回路的判断条件: 无向图存在欧拉回路的充要条件 一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图. 有向图存在欧拉回路的充要条件 一个有向图存在欧拉回 ...

  8. React/React Native 的ES5 ES6写法对照表

    //es6与es5的区别很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component ...

  9. C和指针笔记 3.8 static关键字

    当用于不同的上下文环境时,static关键字具有不同的意思. 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal,但标 ...

  10. iOS程序间调用

    1.在被调用应用内的info.plist里面设置如下: 鼠标右击information property list ,然后从列表中选择URL types 右击 add row 添加一个对象(item) ...