admin 管理员组

文章数量: 1086019


2024年1月18日发(作者:resizeenablerunner)

1.数值处置函数

(1)求绝对值函数ABS()

【格式】 ABS(<数值表达式>)

【功能】 返回<数值表达式>的绝对值,参数的类型为N型,取得的函数值的类型为N型。

【例如】

输入语句:?ABS(),ABS(),ABS(-50)

显示结果: 50

注意:语句 ? <内存变量>|<常量>|<表达式>是非格式输出语句,具有计算功能。语句在命令窗口输入。

(2)取整函数INT()

【格式】 INT(<数值表达式>)

【功能】 返回<数值表达式>的整数部份。

【例如】

输入语句:?INT(),INT(),INT(),INT()

显示结果: 26 26 -26 -26

(3)求四舍五入函数ROUND()

【格式】ROUND(<数值表达式1>,<数值表达式2>)

【功能】返回<数值表达式1>按<数值表达式2>所指定的保留小数位数进行四舍五入的值。若<数值表达式2>的值为负,则返回小数点左侧为<数值表达式2>绝对值个数零的整数值。

【例如】:

输入语句:?ROUND(,2),ROUND(,0),ROUND(,-1),ROUND(,-2)

显示结果: 69 70 100

注意:在执行函数ROUND(,-1)时,小数点左边的数是两位68,由于参数2为-1,则返回值是整数且应带一个0,故经四舍五入后,8进位到6则首位变成7,第二位按规定是0。所以该函数的返回值是70。

(4)求平方根SQRT()

【格式】SQRT(<数值表达式>)

【功能】返回<数值表达式>的平方根。

【说明】<数值表达式>的值必需为正数或零。

【例如】

输入语句:?SQRT(),SQRT(8*8),SQRT(ABS(-36))

显示结果:

(5)求余函数MOD()

【格式】MOD(<数值表达式1>,<数值表达式2>)

【功能】返回<数值表达式1>除以<数值表达式2>的余数。

【说明】函数值的符号与<表达式2>相同。

【例如】

输入语句:?MOD(25,4),MOD(25,-4),MOD(-25,4),MOD(-25,-4)

显示结果: 1 -3 3 -1

(6)求指数函数EXP()

【格式】EXP(<数值表达式>)

【功能】返回以e为底,<数值表达式>为幂次的指数值。

【例如】

输入语句:?EXP(),EXP(1),EXP(-5),EXP(-6)

显示结果:

(7)求对数函数LOG()

【格式】LOG(<数值表达式>)

【功能】返回<数值表达式>的自然对数值。

【说明】<数值表达式>值必需大于零。

【例如】

输入语句:?LOG(),LOG(10),LOG(1)

显示结果:

(8)求最大值函数MAX()

【格式】MAX(<表达式1>,<表达式2>[,<表达式3>…])

【功能】返回表达式串<表达式1>,<表达式2>[,<表达式3>…]中的最大值。

【说明】这些表达式必须具有相同数据类型(可以同是字符、数值或日期)。

【例如】

输入语句:?MAX(-23,,,),MAX('BOOK','PEN','READ')

显示结果: READ &&比较字符的ASCII大小

(9)求最小值函数MIN()

【格式】MIN(<表达式1>,<表达式2>[,<表达式3>…])

【功能】返回表达式串<表达式1>,<表达式2>[,<表达式3>…]中的最小值。

【说明】这些表达式必须具有相同数据类型(可以同是字符、数值或日期)。

【例如】

输入语句:?MIN(-23,,,),MIN('BOOK','PEN','READ')

显示结果: -23 BOOK

2.字符处置函数

(1)宏代换函数&

【格式】&<字符型内存变量>[.<字符表达式>]

【功能】将存储在字符型内存变量中的字符串替换出现。另外,利用可选的句号分隔符“.”及<字符表达式>,还可将额外的<字符表达式>值添在其尾端,而且<字符表达式>本身也可以是一个宏。

【例如】输入下列语句序列

STORE "LIYI" TO XM &&赋值语句

STORE "XM" TO ZXM

&ZXM

显示结果:LIYI

输入语句:XM="'LIYI'" &&赋值语句

&XM

显示结果:LIYI

输入语句序列:N="1"

M="2"

X12="COMPUTER"

X&N.&M

显示结果:COMPUTER

注意:赋值语句的功能是将表达式的值送到变量中。

(2)删除字符串空格函数

① 删除字符串前置空格及尾部空格函数ALLTRIM()

【格式】ALLTRIM(<字符表达式>)

【功能】返回删除<字符表达式>的前置空格及尾部空格的字符串。

【例如】输入下列语句序列

X="计算机"

Y=" 应用"

ALLTRIM(X+Y)

ALLTRIM(X)+ALLTRIM(Y)

显示结果:计算机 应用

计算机应用

② 删除字符串前置空格函数LTRIM()

【格式】LTRIM(<字符表达式>)

【功能】返回删除了<字符表达式>的前置空格的字符串。

【例如】输入下列语句序列(□表示空格)

X="计算机□□□□"

Y="□□应用"

LTRIM(X+Y)

LTRIM(X)+LTRIM(Y)

显示结果:计算机□□□□□□应用

计算机□□□□应用

③ 删除字符串尾部空格函数RTRIM()

【格式】RTRIM(<字符表达式>)

【功能】返回删除了<字符表达式>的尾部空格的字符串。

【例如】输入下列语句序列

X="计算机□□□□"

Y="应用□□"

RTRIM(X+Y)

RTRIM(X)+RTRIM(Y)

显示结果:计算机□□□□应用

计算机应用

(3)搜索字符串起始位置函数AT()和ATC()

【格式】AT(<字符表达式1>,<字符表达式2>[,<数值表达式>])

【功能】 返回<字符表达式1>第一次出此刻<字符表达式2>中的整数位置值(从左到右计数)。若<字符表达式1>未出此刻<字符表达式2>中,则返回零值。若是有可选项<数值表达式>,则在<字符表达式2>中从<数值表达式>值代表出现<字符表达式1>的次数开始查找。函数AT()和ATC()功能相同,只是AT()要区分大小写,ATC()不区分大小写。

【例如】

输入语句:?AT("d","DATA"),ATC("E","Date"),AT("R","RETURN",2)

显示结果: 0 4 5

(4)取子串函数

① 左截子串函数LEFT()

【格式】LEFT(<字符表达式>,<数值表达式>)

【功能】返回从<字符表达式>最左侧计起的<数值表达式>值个字符。

【例如】

输入语句:?LEFT("INPUT UNIT",5)

显示结果:INPUT

② 右截子串函数RIGHT()

【格式】RIGHT(<字符表达式>,<数值表达式>)

【功能】返回从<字符表达式>最右边计起的<数值表达式>值个字符。如果<数值表达式>值小于或等于零,则返回空字符串。

【例如】

输入语句:?RIGHT("INPUT□UNIT",5) &&□表示空格

显示结果:□UNIT

③ 截子串函数SUBSTR()

【格式】SUBSTR(<字符表达式>,<数值表达式1>[,<数值表达式2>])

【功能】返回<字符表达式>中,从<数值表达式1>值开始,由<数值表达式2>值指定个数的字符串。如果无<数值表达式2>选项,则从<数值表达式1>值位置开始直到<字符表达式>值尾部。

【例如】

输入语句:X="OUTPUT UNIT"

SUBSTR(X,4,3),SUBSTR(X,1)

显示结果: PUT OUTPUT UNIT

(5)产生空格函数SPACE()

【格式】SPACE(<数值表达式>)

【功能】返回一个由<数值表达式>值肯定的空格组成的字符串。

【例如】

输入语句:?"INPUT"+"DATA"

"INPUT"+SPACE(5)+"DATA"

显示结果:INPUTDATA

INPUT□□□□□DATA

(6)转换字符串函数

① 字符插入或替换函数STUFF()

【格式】STUFF (<字符表达式1>,<数值表达式1>,<数值表达式2>,<字符表达式2>)

【功能】在<字符表达式1>中插入或替换一字符串。在<字符表达式1>中从<数值表达式1>决定的位置开始,删除由<数值表达式2>决定的字符个数,然后在该位置插入<字符表达式2>。如果<数值表达式2>为零,则仅将<字符表达式2>插入<字符表达式1>中。如果<字符表达式2>为一空字符串,则仅从<字符表达式1>中清除<数值表达式2>个字符而不加入任何字符。

【例如】

输入语句:?STUFF("ABCDEFG",5,2,"123")

STUFF("ABCDEFG",5,0,"123")

STUFF("ABCDEFG",5,2,"")

显示结果:ABCD123G

ABCD123EFG

ABCDG

② 小写字母转大写字母函数UPPER()

【格式】UPPER(<字符表达式>)

【功能】将<字符表达式>中的所有小写字母转换成大写字母,其它字符不变。

【例如】

输入语句:?UPPER("abcdefg")

显示结果:ABCDEFG

③ 大写字母转小写字母函数LOWER()

【格式】LOWER(<字符表达式>)

【功能】将<字符表达式>中的所有大写字母转换成小写字母,其它字符不变。

【例如】

输入语句:?LOWER("AbCdEfG")

显示结果:abcdefg

(7)ASCII码转换函数

① 求数值对应的ASCII字符函数CHR()

【格式】CHR(<数值表达式>)

【功能】返回<数值表达式>值对应的ASCII字符。

【例如】

输入语句:?CHR(65),CHR(33),CHR(65+32)

显示结果: A ! a

② 求ASCII字符对应数值函数ASC()

【格式】ASC(<字符表达式>)

【功能】返回<字符表达式>值最左边字符对应的ASCII码(十进制)。

【例如】

输入语句:?ASC("a computer"),ASC("Append")

显示结果: 97 65

(8)测试字符串长度函数LEN()

【格式】LEN(<字符表达式>)

【功能】返回<字符表达式>值的字符个数。<字符表达式>可以是一个字符串、备注字段或字符类型字段。若<字符表达式>为一空字符串,则返回数值零。

【例如】

输入语句:?LEN("Append Blank")

显示结果:12

(9)条件赋值函数IIF()

【格式】IIF(<逻辑表达式>,<表达式1>,<表达式2>)

【功能】按<逻辑表达式>的逻辑值决定返回<表达式1>的值或<表达式2>的值。若<逻辑表达式>的逻辑值为真,则返回<表达式1>的值,若<逻辑表达式>的逻辑值为假,则返回<表达式2>的值。

【例如】

输入语句:

x=4

IIF(x>0,1,-1)

显示结果:1

3.日期和时间处置函数

(1)DAY()函数

【格式】DAY(<日期表达式>)

【功能】返回以数值类型表示的<日期表达式>所代表该月的第几日。

【例如】

输入语句:D1=CTOD("12-30-99")

DAY(D1)

显示结果:30

(2)MONTH()函数

【格式】MONTH(<日期表达式>)

【功能】返回以数值类型表示的<日期表达式>所代表的月份。<日期表达式>可以为系统日期函数、内存变量或数据库字段。

【例如】

输入语句:D1=CTOD("12-30-99")

MONTH(D1)

显示结果:12

(3)YEAR()函数

【格式】YEAR(<日期表达式>)

【功能】返回以数值类型表示的<日期表达式>所代表的公元4位年份。<日期表达式>可以为系统日期函数、内存变量或数据库字段。

【例如】

输入语句:D1=CTOD("12-30-99")

YEAR(D1)

D1=CTOD("10-01-2021")

YEAR(D1)

显示结果:1999

2001

(4)DOW()函数

【格式】DOW(<日期表达式>)

【功能】返回以数值类型表示的<日期表达式>所代表该礼拜的第几天,礼拜日是第1天,礼拜六是第7天。<日期表达式>可以为系统日期函数、内存变量或数据库字段。

【例如】

输入语句:D1=CTOD("10-01-2001")

DOW(D1)

显示结果:2 &&星期一

(5)DATE()函数

【格式】DATE( )

【功能】返回当前的系统日期。返回的日期格式可用SET CENTURY、SET DATE TO命令来更改。

【例如】

输入语句:set century on &&显示日期带世纪的两位数

DATE()

显示结果:2021-07-21

(6)TIME()函数

【格式】TIME( )

【功能】返回当前的系统时间。

例如:

输入语句:?TIME()

显示结果:14:29:58

4.数据类型转换函数

(1)STR()函数

【格式】STR(<数值表达式1>[,<数值表达式2>[,<数值表达式3>]])

【功能】先计算<数值表达式1>的值,然后将此值转换成长度为<数值表达式2>(若是指定了<数值表达式2>)的字符串;若是指定了<数值表达式3>,则此字符串在小数点右边有<数值表达式3>个数字字符。<数值表达式2>包括整数个数、小数点及右边的小数数字个数。

【说明】

数值表达式2肯定返回字符串的长度(小数点和负号各占1位),当长度大于实际数值的位数时间,则在字符串的前面补上相应个数(表达式2-实际长度)个空格,若表达式2的值比表达式1的整数部份的长度还小时,则输出的字符串为表达式2个*;当输出的小数位数比实际的小数位数大时,则在字符串后补相应个0,当小数位数小于实际位数时,小数位数自动按四舍五入处理。数值表达式3缺省只输出表达式1的整数部分;若同时缺省表达式2在字符串前补相应个数0到10位字符数据。

【例如】

输入语句:?STR(,4,1),STR(,4,1),STR(,4,1)

显示结果: 200 ****

(2)VAL()函数

【格式】VAL(<字符表达式>)

【功能】从<字符表达式>的最左侧字符开始,在忽略前置空格的情形下由左向右将阿拉伯数字字符转换成数值,直到碰到一个非数字字符为止。如果<字符表达式>的第一个字符不是阿拉伯数字,则VAL()函数返回数值零。

【例如】

输入语句:?VAL(" "),VAL("A101")

显示结果:

(3)CTOD()函数

【格式】CTOD(<日期格式字符表达式>)

【功能】将<日期格式字符表达式>转换成日期型的值。

【例如】

输入语句:?CTOD("12/10/99")

Ctod("99/12/10")

显示结果:12/10/99

/ /

注意:

<日期格式字符表达式>的默许格式必需是:月/日/年或月-日-年 (其中年可以是2位也可以是4位),若是:年-月-日或年/月/日格式将取得一个值: / /,固然也可利用命令set date to 命令修改日期格式(参见第五章Set Date to命令或“工具”菜单下的“选项”中的“区域”设置)。

输入语句:Set Date to ymd &&设置日期格式为:年-月日

D1=CTOD("2021/10/01")

D1

D2=CTOD("10-01-2001")

D2

显示结果: 03/10/01

/ /

(4)DTOC()函数

【格式】DTOC(<日期型表达式>[,1])

【功能】将<日期型表达式>转换成日期格式字符串。<日期型表达式>可以是系统日期函数、内存变量或数据库字段。有可选项[,1],则与DTOS()函数功能相同。

【例如】

输入语句:?LEN(DTOC(DATE()))

显示结果:8 &&09/28/01这个结果也和系统日期的格式有关

5.测试函数

(1)测试光标所在列函数COL()

【格式】COL()

【功能】返回屏幕被骗前光标所在的列数(0~79)。

(2)测试光标所在行函数ROW()

【格式】ROW()

【功能】返回屏幕上当前光标所在的行数(0~24)。

(3)读一键函数

【格式】INKEY([数值型表达式])

【功能】返回从键盘输入的一个键的键值。等待用户按键时间为[数值型表达式]秒钟。若[数值型表达式]为0则无穷期的等待,若省略[数值型表达式]则不等待,若超过时间用户未按键,则

返回0。

【例如】

输入语句:?INKEY(3)

INKEY( )

INKEY(0)

显示结果:97 &&从键盘输入小写字母a

0 &&不等待,直接返回0

99 &&无限期的等待,直到输入小写字母c

(4)测试类型函数

【格式】TYPE(<字符型表达式>)

【功能】返回值是<字符型表达式>中字符串所表示的表达式的类型。

【例如】

输入语句:?TYPE("12*2"),TYPE("x12"),TYPE(".F."),TYPE("date()")

X12="abcd"

TYPE("x12")

显示结果:N U(未知) L D

C

(5)测试当前记录号函数

【格式】RECNO([<工作区号或别名>])

【功能】返回值当前工作取区或指定工作区中打开的数据表的饿当前记录号,即记录指针当前指向的记录号。返回值为数值型(N型),缺省工作区好或别名时指当前工作区。

【例如】打开表学生.DBF后,将记录指针移动到第五个记录上。

输入语句:?RECNO()

显示结果: 5

(6)测试文件头函数

【格式】BOF([<工作区号或别名>])

【功能】测试当前工作区或指定工作区中数据表的记录指针是不是指向第一条记录之前。返回值为逻辑型(L型)数据。若记录指针指向第一条记录之前,则返回值为.T.,不然,返回值为.F.。缺省工作区是当前工作区。

【例如】打开学生.dbf(设记录条数大于等于1),执行下列命令。

输入语句: Use 学生 &&打开表学生.DBF

Recno()

BOF()

Skip –1 &&将记录指针往文件头的方向移动一个记录位置

RECNO()

BOF()

显示结果: 1

.F.

1

.T.

(7)测试文件尾函数

【格式】EOF([<工作区号或别名>])

【功能】测试当前工作区或指定工作区中数据表的记录指针是否指向最后一条记录以后。返回值为逻辑型(L型)数据。若记录指针指向最后一条记录之,则返回值为.T.,否则,返回值为.F.。

缺省工作区是当前工作区。

【例如】打开学生.dbf(设记录条数为8),执行下列命令。

输入语句: Use 学生 &&打开表学生.DBF

Go Bottom &&将记录指针指向最后一条记录

Recno()

EOF()

Skip &&将记录指针往文件尾的方向移动一个记录位置

RECNO()

EOF()

显示结果: 8

.F.

9

.T.

(8)测试查询结果函数

【格式】FOUND([<工作区号或别名>])

【功能】在利用查找命令LOCATE/CONTINUE、FIND、SEEK后测试是否在当前工作区或指定工作区中是否找到知足条件的记录,返回的值类型为逻辑型(L型),若是找到,则返回值为.T.,否则返回值为.F.,缺省工作区为当前工作区。

【例如】打开表学生.DBF,使用查找命令

USE 学生

LOCATE FOR 性别=“女“ &&假设找到

Found()

显示结果:.T.

(9)测试文件是否存在函数

【格式】FILE(<文件名>)

【功能】测试在当前的计算机系统中是否存在指定的<文件名>,返回值的类型为逻辑型(L型),如果存在,则返回.T.,否则,返回.F.。

【例如】在当前计算机系统中存在数据表学生.DBF。

输入语句: ?File(“学生.DBF”)

显示结果: .T.

(10)测试表文件是否存在函数

【格式】DBF([<工作区号或别名>])

【功能】测试当前工作区或指定工作区中是否存在数据表文件,返回的值类型为逻辑型(L型),如果存在,则返回值为.T.,否则返回值为.F.,缺省工作区为当前工作区。

(11)测试记录个数函数

【格式】 RECCOUNT([<工作区号或别名>])

【功能】 返回当前工作区或指定工作区中数据表的记录总数,返回的值类型为数值型(N型),缺省工作区为当前工作区。

【例如】打开表学生.DBF(共8条记录)

输入语句: USE 学生

RECCOUNT()

显示结果: 8

(12)选择工作区函数

【格式】SELECT([0/1/别名])

【功能】 返回当前工作区号或未使用工作区的最大编号,选0或缺省0/1/别名返回当前工作区号;选1返回未使用工作区的最大编号。返回的值类型为数值型(N型)。

【例如】设选择2号工作区,测试工作区号。

输入语句: ?SELECT()

SELECT(1)

显示结果为: 1

32767

STR函数主要用于返回与指定数值表达式对应的字符。

语法

STR(nExpression [, nLength [, nDecimalPlaces]])

参数

nExpression

STR( ) 要计算的数值表达式。

nLength

STR( ) 返回的字符串长度。该长度包括小数点所占的字符和小数点右边每一个数字所占的字符。

若是指定长度大于小数点左侧数字位数,STR( ) 用前导空格填充返回的字符串;如果指定长度小于小数点左边的数字位数,STR( ) 返回一串星号,表示数值溢出。

nDecimalPlaces

由 STR( ) 返回的字符串中的小数位数。若要指定小数位数,必需同时包括

nLength。

如果指定的小数位数小于 nExpression 中的小数位数,则截断多余的数字。

返回值类型

字符型

当数字转换为字符串时,始终为 Number 的符号保留一个前导空格。如果

Number 为正,则返回的字符串包含前导空格,并暗含加号。负数将包括减号 (-),且没有前导空格。

利用 Format 函数转换您需要格式化为日期、时间或货币或其他用户概念格式的数值。与 Str 函数不同,Format 函数不包含用于 Number 的符号的前导空格。

值得注意的是,Str 函数只将句点 (.) 识别为有效的小数点分隔符。如果使用其他小数点分隔符(例如在国际应用程序中),请使用 CStr 或 Format 函数将数字转

换为字符串。若要取得特定区域中数字的字符串表示形式,请使用数字的

ToString(IFormatProvider) 方式。例如,将 Double 类型的值转换为字符串时,使用 ToString。

例子:

SUBSTRING ( expression, start, length )

这是字符串概念函数,作用是截选需要的字符串。

substring("abcdefg",2,4) 返回的是abcdefg字符串从第2位的b开始的后4位

也就是到e结束的字符串 即:bcde

expression 字符串、二进制字符串、文本、图像、列或包括列的表达式。请勿利用包括聚合函数的表达式。

start 整数或可以隐式转换为 int 的表达式,指定子字符串的开始位置。

length 整数或可以隐式转换为 int 的表达式,指定子字符串的长度。

SQL中SUBSTRING的返回值:

若是 expression 是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start = 1,则子字符串从表达式的第一个字符开始。

返回字符串的类型与给定表达式的类型相同(下表所示内容除外)。

Case when condition then result

[when …]

[else result]

End

Case子句可以用于任何表达式可以有效存在的地方。Condition是一个返回boolean的表达式。若是结果为真,case表达式的结果就是符合条件的result。如果结果为假,那么以相同的方式搜寻后面的任何when子句。如果没有when condition为真,那么case表达式的结果就是在else子句里的值。如果省略了else语句而且没有任何匹配的条件,结果为null。

例:

select *,

case

when xb='男' then'01'

else'02'

end

as zh

from student

order by xh

或:

select *,ejz=

case

when xb='男' then'1'

else'0'

end

from student

order by xh desc

概念和用法

CONVERT() 函数是把日期转换为新数据类型的通用函数。

CONVERT() 函数可以用不同的格式显示日期/时间数据。

语法

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

ROLLBACK TRANSACTION

将显式事务或隐性事务回滚到事务的起点或事务内的某个保留点。

语法

ROLLBACK [ TRAN [ SACTION ]

[

transaction_name | @tran_name_variable

|

savepoint_name | @savepoint_variable

] ]

参数

transaction_name

是给 BEGIN TRANSACTION 上的事务指派的名称。transaction_name

必需符合标识符规则,但只利用事务名称的前 32 个字

符。嵌套事务时,transaction_name 必须是来自最远的 BEGIN

TRANSACTION 语句的名称。

@tran_name_variable

是用户概念的、含有有效事务名称的变量的名称。必需用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

savepoint_name

是来自 SAVE TRANSACTION 语句的

savepoint_name。savepoint_name

必需符合标识符规则。当条件回滚只影响事务的一部份时利用

savepoint_name。

@savepoint_variable

是用户概念的、含有有效保留点名称的变量的名称。必需用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

注释

ROLLBACK TRANSACTION 清除自事务的起点或到某个保留点所做的所有数据修改。ROLLBACK 还释放由事务控制的资源。

不带

savepoint_name 和

transaction_name 的 ROLLBACK

TRANSACTION 回滚到事务的起点。嵌套事务时,该语句将所有内层事务回滚到最远的 BEGIN TRANSACTION 语句。在这两种情况下,ROLLBACK

TRANSACTION 均将 @@TRANCOUNT 系统函数减为 0。ROLLBACK

TRANSACTION

savepoint_name 不减少 @@TRANCOUNT。

ROLLBACK TRANSACTION 语句若指定

savepoint_name 则不释放任何锁。

在由 BEGIN DISTRIBUTED TRANSACTION 显式启动或从本地事务升级而来的散布式事务中,ROLLBACK TRANSACTION 不能引用

savepoint_name。

在执行 COMMIT TRANSACTION 语句后不能回滚事务。

在事务内允许有重复的保留点名称,但 ROLLBACK TRANSACTION 若利用重复的保留点名称,则只回滚到最近的利用该保留点名称的 SAVE

TRANSACTION。

在存储进程中,不带

savepoint_name 和

transaction_name 的

ROLLBACK TRANSACTION 语句将所有语句回滚到最远的 BEGIN

TRANSACTION。在存储过程当中,ROLLBACK TRANSACTION 语句使

@@TRANCOUNT 在触发器完成时的值不同于挪用该存储过程时的

@@TRANCOUNT 值,而且生成一个信息。该信息不影响后面的处置。

若是在触发器中发出 ROLLBACK TRANSACTION:

将回滚对当前事务中的那一点所做的所有数据修改,包括触发器所做的修改。

触发器继续执行 ROLLBACK 语句以后的所有其余语句。若是这些语句中的任意语句修改数据,则不回滚这些修改。执行其余的语句不会激发嵌套触发器。

在批处置中,不执行所有位于激发触发器的语句以后的语句。

每次进入触发器,@@TRANCOUNT 就增加 1,即便在自动提交模式下也是如此。(系统将触发器视作隐性嵌套事务。)

在存储进程中,ROLLBACK TRANSACTION 语句不影响挪用该进程的批处置中的后续语句;将执行批处置中的后续语句。在触发器中,ROLLBACK

TRANSACTION 语句终止含有激发触发器的语句的批处置;不执行批处置中的后续语句。

ROLLBACK TRANSACTION 语句不生成显示给用户的信息。若是在存储进程或触发器中需要警告,请利用 RAISERROR 或 PRINT 语句。RAISERROR

是用于指犯错误的首选语句。

ROLLBACK 对游标的影响由下面三个规则概念:

1. 当 CURSOR_CLOSE_ON_COMMIT 设置为 ON 时,ROLLBACK 关闭但不释放所有打开的游标。

2. 当 CURSOR_CLOSE_ON_COMMIT 设置为 OFF 时,ROLLBACK 不影响任何打开的同步 STATIC 或 INSENSITIVE 游标,也

不影响已完全填充的异步 STATIC 游标。将关闭但不释放任何其它类型的打开的游标。

3. 对于致使终止批处置并生成内部回滚的错误,将释放在含有该错误语句的批处理内声明的所有游标。不论游标的类型或 CURSOR_CLOSE_ON_COMMIT 的设置,所有游标均将被释放,其中包括在该错误批处理所挪用的存储进程内声明的游标。在该错误批处理之前的批处理内声明的游标以规则 1 和 2 为准。死锁错误就属于这种错误。在触发器中发出的 ROLLBACK 语句也自动生成这种错误。


本文标签: 表达式 数值 语句