T-SQL 语法元素

一、标识符

  在T-SQL语言中,对SQLServer数据库及其数据对象(比如表、索引、视图、存储过程、触发器等)需要以名称来进行命名并加以区分,这些名称就称为标识符。

  通常情况下,SQLServer数据库、数据库以及各种数据对象都应该有一个标识符,但对于某些对象来说,比如约束,标识符是可选的。推荐每个对象都使用标识符。

 1、常规标识符的规则

   (1)、首字符:标识符的第一个字符必须满足下列条件:

    Unicode标准3.2定义的字母,通常就是字母a~z和A~Z。

    下划线(_)、at字符(@)、或数字符号(#)。

   (2)、后续字符:

    Unicode标准3.2中所定义的字母。

    基本拉丁字符或其他国家/地区字符中的十进制数字。

    at符号(@)、美元符号($)、数字符号或下划线。

   (3)、不能是保留字:

     常规标识符不能使用SQL Server内部的保留字,比如char。

   (4)、不允许嵌入空格:

 2、带分隔符的标识符

   当一定要使用保留字时,如table,这样的标识符是SQLServer内部的保留字,如果非得这样使用,就必须用这样的方式:"table"。

   (1)、分隔符

    T-SQL规定下列符号为特定的分隔符。

    1、双引号("):用于表示引用的标识符。

    2、中括号([]):用于表示括号中的标识符。

   (2)、什么时机使用分隔符

    T-SQL常在下列情况下使用分隔符。

    1、对象名称或对象名称的组成部分中包含保留字时。

    2、使用其他特殊的字符时。

二、数据类型

  T-SQL语言和SQLServer数据库中的数据通常需要定义一个数据类型,数据类型定义了对象可以容纳的数据的种类。

 1、那些对象需要数据类型

   (1)、表和视图的列:

    在定义表或视图时,其列需要定义数据类型。

   (2)、存储过程的参数:

    在定义存储过程的T-SQL代码中定义参数的数据类型。

   (3)、变量:

     如果在T-SQL中使用变量,需要定义数据类型。

   (4)、带返回值的函数:

     返回一个或多个特定类型数据值的T-SQL函数中的返回值需要定义数据类型。

   (5)、带返回代码的存储过程:

     具有返回代码的存储过程。

 2、如何选择恰当的数据类型

   (1)、必须

    首先根据需要判断数据的种类、需要存储的数据的最大长度和大小,对于数字数据类型还要考虑精度和小数位数,然后再T-SQL中挑选备用的数据类型。

   (2)、够用

    接下来可以再备用的数据类型中挑选够用即可的类型作为最后的方案。比如要表述“身份证号码”这样的字段,nvarchar和nchar这样的数据类型都可以,最后我们可以使用nchar(18),因为身份证号码规定为统一的18位,所以选择定长的数据类型。

   (3)、权衡

    权衡空间和效率,权衡数据的存储方式等。

    通常情况下,数据类型的长度越小,存储大量数据所需要的存储空间就越小。因此一次I/O读取到内存中的数据记录就会越多,同样大小的内存空间存储的记录数量就会更多,这样T-SQL语句使用数据时从内存读取的几率就增大了,所以自然效率就高,尤其是联机事务频繁的系统,这样的设计优点就十分明显。"细节决定成败",数据类型的选择恰当与否往往会对数据库系统的性能产生非常大的影响。

 3、基本数据类型

名称 说明 取值范围
Bit 整数型 0、1或NULL,常用于代表Yes(No)、True(False)等
Int 整数型 -2147483648~2147483647
tinyint 整数型 0~255
smallint 整数型 -32768~32768
Bigint 整数型 -9223372036854775808~9223372036854775807
binary 二进制 1~8000字符的定长二进制数据,比如0x2A
varbinary 二进制 1~8000字符的变长二进制数据,varbinary(max)可以存储2^31个字节
image 二进制 变长达20亿字符的二进制数据
char 字符型 1~8000字符的定长、非Unicode字符数据
varchar 字符型 1~8000字符的非定长的、Unicode字符数据varchar(max)可以存储2^31个字符
text 字符型 变长达20亿字符的unicode字符数据
nchar unicode字符型 1~4000定长的、unicode字符数据
nvarchar unicode字符型 1~4000字符的非定长的、unicode字符数据,nvarchar(max)可以存储2^31-1个字符
ntext unicode字符型 1~1073741823字符、非定长的、unicode字符数据
datetime 日期时间型 1753年1月1日~9999年12月31日的日期和时间
smalldatetime  日期时间型 1900年1月1日~2079年6月6日的日期和时间
decimal 精确数值型 -1038次方+1~1038-1的固定精度和范围的数值型数据
numeric 精确数值型 同decimal
float 近似数值型 -1.79E+308~1.79E+308之间的浮点数
real 近似数值型 -3.40E+38~3.40E+38之间的浮点数
money 货币型 -263~263-1的货币型数据,精确到万分之一
smallmoney 货币型 -214748.3648~214748.3647的货币型数据,精确到万分之一
timestamp 特殊类型 时间戳,用于记录SQLServer在一行数据的活动次序
uniqueidentifier  特殊类型 16位的16进制数据表示的全局唯一标识符(GUID)
sql_variant 特殊类型 存储除了text、ntext、image和sql_variant之外的SQLServer支持的各种数据类型值的数据类型

      SQLServer2008新增数据类型

      1、日期和时间类型

名称 取值范围
Time 00:00:00.0000000到23:59:59.0000000,按照hh:mm:ss的格式精确表示时间
Date 00001-01-01到99999-12-31,按照年-月-日的格式表示日期
DateTime2 0001-01-01 00:00:00.0000000到9999-12-31 23:59:59:9999999,表示日期和时间
DateTimeOffset 00000-01-01 00:00:00.0000000到99999-12-31 23:59:59:9999999

      2、hierarchid

      新增的数据类型,用于创建层次结构的表,或引用位于另一位置的数据层次结构。

三、常量

  常量是指在T-SQL代码中其值始终不变的数据。常量的定义格式取决于其所属于的数据类型。

  常量的使用不需要定义,直接在T-SQL中使用就可以,所以需要关注的是各种典型的常量的格式。

  1、数值型常量的格式

  数值型常量的格式不需要任何其他的符号,只需要按照特定的数据类型进行赋值就可以

    (1)、bit常量:

      0、1

    (2)、int常量:

      89、22

    (3)、decimal(numeric)常量:

      123.89、89.0

    (4)、float(real)常量:

      100.5E5

    (5)、money(smallmoney)常量:

      $12、$123.90

 2、字符串型常量的格式

    字符串型常量的格式需要以单引号(‘)包含起来。

    1、非unicode字符串常量:

     ‘Hello World‘

    2、unicode字符串常量:

     N‘Hello World‘

      N 在这里表示Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。也就是说加 N 就表示字符串用 Unicode 方式存储。但有时候加与不加都一样,又是什么原因呢?这是由于自动转换造成的。

    3、单引号作为字符串常量的处理:

      如果单引号本身也属于字符串常量的内容,就需要使用单引号将其包含在内,比如‘O‘‘‘Brien‘实际上定义的就是字符串O‘Brien。‘‘你好‘‘,定义的就是‘你好‘。

    4、日期时间型常量的格式

      日期时间型常量的格式需要以单引号(‘‘)包含起来,和字符串常量的格式一致。

      如:‘April 15,1998‘  ‘04/15/98‘  ‘14:30:24‘  ‘04:24 PM‘

四、注释

  在T-SQL代码中,添加注释信息是一个很好的习惯,便于程序的可读性。

  1、添加单行注释

    如果需要添加单行注释,可以使用两个连字符(--)。

    如: select * from person  --查询所有的人信息

  2、添加多行注释信息

    如果需要添加多行注释信息,可以使用正斜杠型号字符对(/**/)

    如:  

/*  
    这是注释第一行             
    这是注释第二行 
*/

五、变量

  在T-SQL语言中,经常需要使用变量来临时赋值,变量常用于在T-SQL代码中作为存储执行的计数器,或作为临时数据存储场所。

 1、变量的数据类型

    SQLServer支持的数据类型。

 2、变量的分类

   (1)、全局变量

    T-SQL中的全局变量是由SQLServer系统定义和使用的变量。DBA和用户可以使用全局变量的值,但不能自己定义全局变量。全局变量以两个@@为标记,如        @@Connections等。

   (2)、局部变量

     T-SQL中的局部变量是由用户定义和使用的变量,其作用范围仅仅局限在定义的T-SQL程序内。局部变量以一个@为标记,如@A。

 3、局部变量的声明

   在T-SQL程序中,定义局部变量的语法如下。

    declare
    {{@local_variable data_type}
    |{@cursor_variable_name cursor}
    |{table_type_definition}
    }[,...n]

   其中主要参数说明如下。

    @local_variable:局部变量的名称,必须以at符号(@)开头,符合标识符规则。

    data_type:任何有系统提供的或用户定义的数据类型,但不能是text、ntext或image数据类型。

    @cursor_variable_name:游标变量的名称。

    cursor:指定变量是局部游标变量。

    table_type_definition:定义表数据类型。

 4、局部变量的赋值

   T-SQL程序中给局部变量赋值有三种方法。

   1、SET语句赋值

     在T-SQL程序中,用SET语句给局部变量赋值的语法如下:

  SET @local_variable=expression

    其中,@local_variable为局部变量的名称,expression为有效的表达式,表示将表达式的值赋予局部变量。

   2、select语句赋值

    与上面的SET等效的赋值语句是将SET替换为SELECT。

  SELECT @local_variable=expression

   3、通过选择语句赋值

    很多情况下,局部变量需要获取通过选择语句查询某个表后得到的字段值。

  select @empId = max(empId)  --查出的值赋给局部变量

    如果查询语句返回的值不止一行,而且变量引用一个非标量表达式,那么最后变量的值将是最后一行记录的特定字段的值。

 5、局部变量的作用域

    局部变量的作用域就是可以引用该变量的T-SQL语句的范围。局部变量的作用域从声明变量的地方到声明变量的批处理或存储过程的结尾。

时间: 2024-11-05 01:02:01

T-SQL 语法元素的相关文章

LINQ To SQL 语法及实例大全

LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c

SQLite的SQL语法

SQLite库能够解析大部分标准SQL语言.但它也省去了一些特性而且增加了一些自己的新特性.这篇文档就是试图描写叙述那些SQLite支持/不支持的SQL语法的.查看keyword列表. 例如以下语法表格中,纯文本用蓝色粗体显示.非终极符号为斜体红色.作为语法一部分的运算符用黑色Roman字体表示. 这篇文档仅仅是对SQLite实现的SQL语法的综述,有所忽略.想要得到更具体的信息,參考源码和语法文件“parse.y”. SQLite运行例如以下的语法: ALTER TABLE ANALYZE A

SQLite的 SQL语法总结

SQLite库可以解析大部分标准SQL语言.但它也省去了一些特性并且加入了一些自己的新特性.这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的.查看关键字列表. 如下语法表格中,纯文本用蓝色粗体显示.非终极符号为斜体红色.作为语法一部分的运算符用黑色Roman字体表示. 这篇文档只是对SQLite实现的SQL语法的综述,有所忽略.想要得到更详细的信息,参考源代码和语法文件“parse.y”. SQLite执行如下的语法: ALTER TABLE ANALYZE ATTACH DATA

[Android新手区] SQLite 操作详解--SQL语法

该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解析大部分标准SQL语言.但它也省去了一些特性并且加入了一些自己的新特性.这篇文档就是试图描述那些SQLite支持/不支持的SQL语法的.查看关键字列表. 如下语法表格中,纯文本用蓝色粗体显示.非终极符号为斜体红色.作为语法一部分的运算符用黑色Roman字体表示. 这篇文档只是对SQLite实现的SQ

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 database dbname 3.说明:

Impala SQL 语言元素(翻译)[转载]

原 Impala SQL 语言元素(翻译) 本文来源于http://my.oschina.net/weiqingbin/blog/189413#OSC_h2_2 摘要 http://www.cloudera.com/content/cloudera-content/cloudera-docs/Impala/latest/Installing-and-Using-Impala/ciiu_langref_sql.html 目录[-] Impala SQL 语言元素(Elements) ALTER T

Hive基础sql语法(DDL)

前言: 经过前面的学习 我们了解到Hive可以使用关系型数据库来存储元数据,而且Hive提供了比较完整的SQL功能 ,这篇文章主要介绍Hive基本的sql语法. 首先了解下Hive的数据存储结构,抽象图如下: 1.Database:Hive中包含了多个数据库,默认的数据库为default,对应于HDFS目录是/user/hadoop/hive/warehouse,可以通过hive.metastore.warehouse.dir参数进行配置(hive-site.xml中配置) 2.Table: H

Hadoop Hive sql语法详解

Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己的SQL 去查询分析需要的内容,这套SQL 简称Hive SQL,使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据.而mapreduce开发人员可以把己写的mapper 和reducer 作为插件来支持

ORACLE分页查询SQL语法——最高效的分页

--1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd') AND TO_DATE ('20060731', 'yyyymmdd') AND ROWNUM <= 20) table_

简单的SQL语法

整理一下本机上的东西,都是以前学习的时候顺手记的随笔,希望能给程序部的孩子们一点帮助. SQL语法在SQL数据库中基本都是通用的,web或者项目开发最常用的也就是最简单的这几个了吧. 1 选取一列数据SELECT 列名称,列名称 FROM 表名称星号(*)是选取所有列的快捷方式 2 从列中仅选取唯一不同的值SELECT DISTINCT 列名称 FROM 表名称 3 如需有条件地从表中选取数据SELECT 列名称 FROM 表名称 WHERE 列 运算符 值例如 SELECT * FROM Pe