T-SQL 语法元素

1、标识符sql

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

  一般状况下,SQLServer数据库、数据库以及各类数据对象都应该有一个标识符,但对于某些对象来讲,好比约束,标识符是可选的。推荐每一个对象都使用标识符。express

一、常规标识符的规则ide

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

    Unicode标准3.2定义的字母,一般就是字母a~z和A~Z。性能

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

(2)、后续字符:设计

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

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

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

(3)、不能是保留字:

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

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

二、带分隔符的标识符

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

(1)、分隔符

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

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

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

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

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

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

    二、使用其余特殊的字符时。

2、数据类型

  T-SQL语言和SQLServer数据库中的数据一般须要定义一个数据类型,数据类型定义了对象能够容纳的数据的种类。

一、那些对象须要数据类型

(1)、表和视图的列:

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

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

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

(3)、变量:

     若是在T-SQL中使用变量,须要定义数据类型。

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

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

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

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

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

(1)、必须

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

(2)、够用

    接下来能够再备用的数据类型中挑选够用便可的类型做为最后的方案。好比要表述“×××号码”这样的字段,nvarchar和nchar这样的数据类型均可以,最后咱们可使用nchar(18),由于×××号码规定为统一的18位,因此选择定长的数据类型。

(3)、权衡

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

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

三、基本数据类型

名称

说明

取值范围

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个字节

p_w_picpath

二进制

变长达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、p_w_picpath和sql_variant以外的SQLServer支持的各类数据类型值的数据类型

SQLServer2008新增数据类型

      一、日期和时间类型

名称

取值范围

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

      二、hierarchid

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

3、常量

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

常量的使用不须要定义,直接在T-SQL中使用就能够,因此须要关注的是各类典型的常量的格式。

一、数值型常量的格式

  数值型常量的格式不须要任何其余的符号,只须要按照特定的数据类型进行赋值就能够

(1)、bit常量:

      0、1

(2)、int常量:

      8九、22

(3)、decimal(numeric)常量:

      123.8九、89.0

(4)、float(real)常量:

      100.5E5

(5)、money(smallmoney)常量:

      $十二、$123.90

二、字符串型常量的格式

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

一、非unicode字符串常量:

     'Hello World'

二、unicode字符串常量:

     N'Hello World'

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

三、单引号做为字符串常量的处理:

      若是单引号自己也属于字符串常量的内容,就须要使用单引号将其包含在内,好比'O'''Brien'实际上定义的就是字符串O'Brien。''你好'',定义的就是'你好'。

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

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

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

4、注释

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

一、添加单行注释

    若是须要添加单行注释,可使用两个连字符(--)。

    如: select * from person  --查询全部的人信息

二、添加多行注释信息

    若是须要添加多行注释信息,可使用正斜杠型号字符对(/**/)

    如:  

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

5、变量

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

一、变量的数据类型

    SQLServer支持的数据类型。

二、变量的分类

(1)、全局变量

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

(2)、局部变量

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

三、局部变量的声明

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

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

   其中主要参数说明以下。

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

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

    @cursor_variable_name:游标变量的名称。

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

    table_type_definition:定义表数据类型。

四、局部变量的赋值

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

一、SET语句赋值

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

  SET@local_variable=expression

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

二、select语句赋值

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

  SELECT@local_variable=expression

三、经过选择语句赋值

    不少状况下,局部变量须要获取经过选择语句查询某个表后获得的字段值。

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

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

五、局部变量的做用域

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

相关文章
相关标签/搜索