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、注释:是程序中不被执行的正文。
作用:第一、说明代码的含义,增强代码的可读性。
第二、可以把程序中暂时不用的语句注释掉,等需要时,再将它们恢复。 单行注释:-- 两个减号