T-SQL语法(7)

2019-06-30 10:48

Integer_expression为要返回的字符数。

LEN:LEN函数提供了字符串表达式中的字符的长度。 语法:LEN(string-expression) 例如:LEN(‘ABCE’)值为4

LOWER:LOWER函数将大写字符转换为小写字符。 语法:LOWER(character_expression) 变量是字符表达式。

UPPER:UPPER函数将小写字符转换为大写字符。 语法:UPPER(character_expression) 变量是字符表达式。

REVERSE:REVERSE返回字符串表达式的倒序。 语法:REVERSE(character_expression) 例如:REVERSE(‘PAM’)结果为‘MAP’ LTRIM:LTRIM删除字符表的前导空格。 语法:LTRIM(character_expression) 变量是字符表达式。

RTRIM:RTRIM删除字符表的后继空格。 语法:RTRIM(character_expression) 变量是字符表达式。

NULLIF:如果一对表达式相等,NULLIF函数就返回NULL,如果它们不相等,NULLIF

函数就返回第一个表达式的值。

语法:NULLIF(expression1,expression2)

变量:expression可以数值型,也可以是字符串。 例如:SELECT NULLIF(134,135)返回值为134。 PI:PI函数返回pi的值3。1415926

REPLACE:REPLACE用串表达式3取代串表达式1中的表达式2。 语法:REPLACE(‘string1’,‘string2’,‘string3’) 例如:SELECT REPLACE(‘mydog’,‘dog’,‘car’)

本例中,用CAR取代了MYDOG中的DOG,结果为MYCAT。

STUFF:函数可以将表达式的一部分用所提供的另一个字符串替代,替代部分用起始位置

和长度来定义。

语法:STUFF(character_expression,start,length,character_expression)

LENGTH:是决定要替换的字符数。

例如:STUFF(‘MY DOG FIDO’,8,4,‘SALLY’) SUBSTRING:返回字符型的一部分。

语法:SUBSTRING(expression,start,length) 例如:SUBSTRING(‘MICROSOFT’,6,4) 返回SOFT。

REPLICATE:REPLICATE将字符串表达式复制用户定义的次数。 语法:REPLICATE(character_expression,integer-expression) 例如:REPLCATE(‘2’,5) 十一、游标

1、应用程序对游标操作过程

A:用DECLARE语句声明光标,并定义光标类型和属性。

B:调用OPEN语句打开和填充光标。

C:执行FETCH语句读取光标中的单行数据,Transact-SQL光标不支持多行读取

操作。

D:如果需要,使用帝UPDATE…WHERE CURRENT OF…或

UPDATE…WHERE CURRENT OF…语句修改光标表中的当前行数据。

E:完成光标操作之后,执行CLOSE语句关闭光标,如果需要还可以OPEN语句

打开光标。

F:最后执行DEALLOCATED语句删除光标,并释放它所占用的所有资源。

2、 游标定义语法:

A:SQL-92游标定义语法

语法:DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR FOR select_statement

[FOR {READ ONLY | UPDATE [OF column_list]}] 说明: 1)cursor_name为所定义的光标名称。

2)insensitive说明定义的光标使用SELECT语句结果集合的临时拷贝,禁止应用程序通过光标对其基表进行修改。

3)SCROLL选项指出所定义光标的数据操作可以使用以下所有选项: ·FIRST:读取光标中的第一行数据;

·NEXT: 读取光标当前位置中的下一行数据; ·PRIOR: 读取光标当前位置中的上一行数据; ·LAST: 读取光标中的最后一条数据;

·RELATIVE n :读取光标当前位置之前(n为负数)或之后(n为正数)的第n行资料; ·ABSOLUTE n: 读取光标中的第n行数据。

没有说明SCROLL选项时,DECLARE所定义的光标只能使用NEXT选项,即每次只能读取

下一行资料。

4)select_statement为SELECT查询语句,它定义光标的结果集合,但其中不能使用

COUMPUTE、COMPUTE BY、FOR BORWSE和INTO等关键词。

5)READ ONLY选项说明所定义的光标为只读光标,它禁止UPDATE语句和DELETE语句通过

光标修改基表中的数据。

6)UPDATE [OF column_list]:可以通过光标修改其基表数据,其中可修改的列用column_list参数列出。如果只指定UPDATE关键词,而省略OF column_list参数时,说明非只读光标中的所有列均可以修改。

注意:光标声明语句中,如果有下列条件之一时,无论是否指定INSENSITIVE选项,

系统将自动把所建立的光标定义为INSENSITIVE光标:

1) SELECT语句中使用了DISTINCT、UNION、GROUP BY或HAVING等关 键词。 2) SELECT语句的选择列表中包含有集合表达式。

3) 所有光标基表均没有建立唯一索引,并且光标具有SCROLL属性时。 4) SELECT语句中包含有ORDER BY子句,而ORDER BY子句指定的列又不具备和唯一标识功

能。

B:Transact-SQL游标定义语法 语法:DECLARE cursor_name CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC]

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] FOR select_statement

[FOR UPDATE [OF column_list]]

说明:1)其中,cursor_name、SCROLL、UPDATE [OF column_list]参数与SQL-92语法格式定义中同名参数的作用相同。READ_ONLY与SQL-92定义中的READ_ONLY选项的作用相同。

2)LOCAL和GLOBAL选项分别说明所定义的游标为局部游标或全局游标。 局部游标的作用域为定义游标的批、存储过程或触发器

全局游标的作用域为当前连接,在作用域外游标是不可见的。

3)FORWARD_ONLY选项指所定义的游标的数据提取操作只能前滚,即FETCH语句只能使用NEXT选项。

4)STATIC与SQL-92定义中的INSENSITIVE关键字的功能相同,它将游标定义为

静态游标。

5)KEYSET关键字定义一个键集驱动游标,键集游标中的数据行及其顺序是固定

的。

6)DYNAMIC将游标定义为动态游标,可以随时看到游标结果集中被修改的数据,

不能使用ABSOLUTE提取选项定位游标。

7) SCROLL_LOCKS选项要求SQL Server在将数据读入游标时,锁定基表中的数据

行,以确保以后能通过游标成功对基表进行定位删除和修改。

8)OPTIMISTIC说明不锁定基表的数据行,当应用程序通过游标对基表进行修改

时,首行检测游标填充之后表中的数据是否被修改,如果被修改则停止当前操作。

9)select_statement为定义游标集合的SELECT语句,其中不能包含COMPUTE、

COMPUTE BY、FOR BROWSE和不INTO关键字。

注意:游标声明语句中,如果有下列条件之一时,无论是否指定STATIC选项,系统

将自动把所建立的光标定义为静态光标: 1) SELECT语句中使用了DISTINCT、UNION、GROUP BY或HAVING等 关键词。

2)SELECT语句的选择列表中包含有集合表达式。

3)所有光标基表均没有建立唯一索引,而又要求建立键值游标。

4)SELECT语句中包含有ORDER BY子句,而ORDER BY子句指定的列又不具备唯一标识功能,所定义的动态游标将被转换为键集游标,不能转换为键集游标时,将转换为静态游标。

3、 填充游标:

定义游标后,使用OPEN语句可打开并填充游标。OPEN语句的语法格式: OPEN {{[GLOBAL] cursor_name}|cursor_variable_name}

其中cursor_name参数或cursor_variable_name变量指所打开和填充的游标

名称。

@@CURSOR_ROWS全局变量

1)-m说明游标以异方式填充,m为当前键集中已填充的行数; 2)-1游标为动态游标,游标中的行数是动态变化的。

3)0指定的游标未打开,或是所打开的游标已经关闭或释放。 4)n游标被全部填充,返回值为游标中的和数。

4、提取数据:

Transact-SQL程序调用FETCH语句提取游标中数据,FETCH每次只提取一行数

据,FETCH语句的语法: 格式:

FETCH

[[NEXT | PRIOR | LAST | ABSOLUTE {n | @nvar}

| RELATIVE {n | @nvar}]FROM]

{{[GOLBAL] cursorname} | cursor_variable_name} [INTO @variable[,...n]]

说明:1)cursor_name参数或cursor_variable_name变量指出所提取数据的

游标名称。

2)GLOBAL表明所操作游标为一全局游标。

3)NEXT表明读取游标下一行,第一次对游标实行读取操作时,返回第一

行。

4)PRIOR、FIRST、 LAST、 ABSOLUTE n和RELATIVE n选项只适用于

SCROLL游标

5)INTO子句说明将读取的游标数据存放到指定的局部变量中。 @@FETCH_STATUS

1)0: 说明FETCH语句成功执行

2)-1:说明的指的位置超出了游标结果集合的范围,从而导致读取不到

数据

3)-2: 说明要读取的行已从游标结果集合中删除,它不再是游标结果

集中的成员

5、游标定位修改和删除操作

SQL Server中的UPDATE语句和DELETE语句也支持游标操作,它们可以通过游标修改或删除游标基表中的当前数据行。用于游标操作时,UPDATE语句和DELTEE语句的格式为:

1) UPDATE table_name SET 子句

WHERE CURRENT OF cursor_name 2) DELETE FORM table_name

WHERE CURRENT OF cursor_name

当游标基于多个数据表时,UPDATE语句和DELETE语句一次只能修改或删除一个

基表中的数据,而其它基表中数据不受影响。

6、关闭和释放游标

当提取完游标结果集合中的数据时,应及时调用CLOSE语句关闭游标。在关闭游

标时,SQL Server删除游标当前的结果集合,并释放游标对数据库的所有锁定。

CLOSE语句的语法格式:

CLOSE {{[GLOBAL] cursor_name}| cursor_variable_name}

DELLOCATE释放游标的数据结构之后,要使用游标必须重新执DECLARE语句。 DELLOCATE语句的语法格式:

DEALLOCATE {{[GLOBAL] cursor_name}| cursor_variable_name} 十二、存储过程

1、局部变量:局部变量是用户定义的变量。它用DECLARE语句声明,用户可以用

SELECT或SET语句为其赋值。使用范围是定义的批处理、存储过程、储发器。

命名局部变量的语法:

declare @variable_name datatype

[,@variable_name datatype]

其中,

A:@variable_name是局部变量的名字,必须以“@”符号开头。

B:datatype 是为该局部变量指定的数据类型,如果需要,指定资料长度。 例:声明一个整型变量@order_count ,使用如下语句: declare @order_count int

我们可以 在一条declare语句中声明多个变量,变量之间用逗号分开。 Declare @lastname varchar(30),@firstname varchar(20)

C:变量声明以后,系统自动给它们初始为NULL。为局部变量赋值可以使用SET

语句。语法:

Set @variable_name=expression[,@variable_name=expression]… 其中:

(1)@variable_name是局部变量名。

(2)expression是与局部变量的数据类型相匹配的表达式。该表达式的值

赋给指定的局部变量。

例:在批处理中声明两个变量,并为它们赋值,然后将它们用到SELECT语句 的WHERE子句中。 Use shikong Go

Declare @kcshl decimal(15,2),@kcje decimal(15,2) Set @kcshl=1000 Set @kcje=25000

Select * From spkfjc

Where kcshl<=@kcshl and kcje<=@kcje Go

把spbh为00000001的商品的kcje赋值给@kcje Select @kcje=kcje from spkfjc Where spbh=’00000001’

如果SELECT 得到的不是单一的结果而是一个结果集,那么最后一个结果赋给

变量。

2、全局变量:全局变是SQL SERVER系统提供并赋值的变量。用户不能建立全局变量,

也不能用SET语句来修改全局的值。通常将全局变量的值赋给局部变量,以便保存和

处理。全局变量的名字以@@开头。

例如:@@rowcount 表示最近一个语句影响的行数。@@error保存最近执行操作

的错误状态。

3、注释:是程序中不被执行的正文。

作用:第一、说明代码的含义,增强代码的可读性。

第二、可以把程序中暂时不用的语句注释掉,等需要时,再将它们恢复。 单行注释:-- 两个减号


T-SQL语法(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:名校诊断学试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: