任何不返回行的语句将 @arowcount设置为0,如 print语 if 2=2 print 2 若将 print改为 select、set则不同 if (@@rowcount=0 print 'rowcount is 0 再如: 例1: update成绩表 set成绩=成绩+1 where课程号=C888 if @@rowcount=0 print Did not modify 故,可通过上述方法来判断是否存在满足条件的记录。 (2)@@error 在每一条语句执行完毕后,应该通过 error来检查语句是否存在 错误。当@@eror为非0值时,表示语句执行时产生了错误。@@eror 的值会随着每一条SQL语句的运行发生变化 select*from学生表 select @@error (3) a@spid;当前进程和服务器进程标识符。如: select@ @spid, system user登录用户,user用户名 (4) a@identity:最后插入的标识值。如: create table标识表( aa int identity,姓名char(9) Insert标识表(姓名) values(a) select @(@identity nsert标识表(姓名) values(bb) select @@identity select*from标识表
21 ◼ 任何不返回行的语句将@@rowcount 设置为 0,如 print 语 句: if 2=2 print 2 --若将 print 改为 select、set 则不同! if @@rowcount=0 print 'rowcount is 0'。 再如: 例 1: update 成绩表 set 成绩=成绩+10 where 课程号='C888' if @@rowcount=0 print 'Did not modify' 故,可通过上述方法来判断是否存在满足条件的记录。 (2)@@error 在每一条语句执行完毕后,应该通过@@error 来检查语句是否存在 错误。当@@error 为非 0 值时,表示语句执行时产生了错误。@@error 的值会随着每一条 SQL 语句的运行发生变化。 select * from 学生表 select @@error (3)@@spid:当前进程和服务器进程标识符。如: select @@spid,system_user 登录用户,user 用户名 (4)@@identity:最后插入的标识值。如: create table 标识表(aa int identity , 姓名 char(9)) insert 标识表(姓名) values('aaa') select @@identity insert 标识表(姓名) values('bbb') select @@identity select * from 标识表
(5)*@@fetch status 游标:相当于指针,用于对表中的记录一条一条地操作(用 fetch next 语句)。 aafetch status表示 FETCH语句执行后游标的状态。值有 0 FETCH语句成功,-1- FETCH语句不成功,-2—所取数据的行没有 找到。 四、函数(P103) 可使用户根据其返回的信息进行相关操作,它们可用于 SELECT语 句的 SELECT子句、 WHERE子句、 GROUP BY子句、表达式中。内建 函数可分类为(8类): 系统函数:用于返回与 SQL Server系统、数据库、数据库对象、 用户有关的信息 日期函数:用来操作 datetime、 smalldatetime类型的数据 ●字符串函数:用来操作二进制、字符串数据。 数学函数 类型转换函数 文本和图象函数:用于对文本、图象类型的数据进行操作 合计函数:avg、 count、max、min、sum等。 游标函数:对用户查询的结果进行逐行处理:@ cursor rows、 cursor status, @@fetch status 以下只讲部分内容。 (一)系统函数:用于返回与 SQL Server系统、数据库、数据库对象、 用户有关的信息 1. APP NAME(一应用程序的名称,返回值类型为 nvarchar 例1: print app name(-SQL查询分析器 2. COALESCEO一多分支函数,返回多个表达式中第一个非NULL值的 表达式的值(如果所有表达式的值均为NULL,则函数返回NULL值或 出错)。 COALESCE(<表达式1>[表达式n)( coalesce:合并、结合、 组合)
22 (5)* @@fetch_status 游标:相当于指针,用于对表中的记录一条一条地操作(用 fetch next 语句)。@@fetch_status 表示 FETCH 语句执行后游标的状态。值有 0—FETCH 语句成功,-1—FETCH 语句不成功,-2—所取数据的行没有 找到。 四、函数(P103) 可使用户根据其返回的信息进行相关操作,它们可用于 SELECT 语 句的 SELECT 子句、WHERE 子句、GROUP BY 子句、表达式中。内建 函数可分类为(8 类): ⚫ 系统函数:用于返回与 SQL Server 系统、数据库、数据库对象、 用户有关的信息 ⚫ 日期函数:用来操作 datetime、smalldatetime 类型的数据 ⚫ 字符串函数:用来操作二进制、字符串数据。 ⚫ 数学函数 ⚫ 类型转换函数 ⚫ 文本和图象函数:用于对文本、图象类型的数据进行操作。 ⚫ 合计函数:avg、count、max、min、sum 等。 ⚫ 游标函数:对用户查询的结果进行逐行处理:@@cursor_rows、 cursor_status、@@fetch_status。 以下只讲部分内容。 (一)系统函数:用于返回与 SQL Server 系统、数据库、数据库对象、 用户有关的信息 1.APP_NAME()—应用程序的名称,返回值类型为 nvarchar。 例 1: print app_name() -- SQL 查询分析器 2.COALESCE()—多分支函数,返回多个表达式中第一个非 NULL 值的 表达式的值(如果所有表达式的值均为 NULL,则函数返回 NULL 值或 出错)。 COALESCE (<表达式 1>[,…表达式 n]) (coalesec:合并、结合、 组合)
例 declare @x char(2), @y char(4) select @x=22, @y=al 例2*:要求所有表达式值的类型一致(虽然有些情况下可自动转换)。 declare @x int, @y char(4) select @y=al print coalesce(ax, @y) 3. COL LENGTH(求字段的长度(占用字节数),函数返回值类型为int COL LENGTH(<表名><字段名>) 例1: print col length(学生表;入学年份) 例2: create table cbf(cl varchar(40), c2 nvarchar(40)) select col length('cbf, cl,), col length('cbf, c2)-40, 80 4. COL NAME(一求字段的名称 COL NAME (<table id>, <column id>) 例 declare @x int while@x<6 print col name(object id(学生表),@x) set axa+l 例2*:
23 例 1: declare @x char(2),@y char(4) select @x='22',@y='a1' print coalesce(@x,@y) 例 2*:要求所有表达式值的类型一致(虽然有些情况下可自动转换)。 declare @x int,@y char(4) select @y='a1' print coalesce(@x,@y) 3.COL_LENGTH()—求字段的长度(占用字节数),函数返回值类型为 int。 COL_LENGTH (<’表名’>,<’字段名’>) 例 1: print col_length('学生表','入学年份') 例 2: create table cbf(c1 varchar(40) , c2 nvarchar(40) ) select col_length('cbf','c1'),col_length('cbf','c2') --40,80 4.COL_NAME()—求字段的名称 COL_NAME (<table_id>,<column_id>) 例 1: declare @x int set @x=1 while @x<6 begin print col_name(object_id('学生表'),@x) set @x=@x+1 end 例 2*:
Select col name( object id(学生表), ordinal position) from information schema columns where table name→学生表 例3* Select column name from information schema. columns 5. DATALENG TH(求数据的实际长度,函数返回值类型为int,NUIL 值的长度为NULL 例1 Print datalength(abcdefg) select姓名, datalength(住址)住址长度from学生表 6.DB_ID(一求数据库的编号,函数返回值类型为 smallint如果没有指 定数据库名,则返回当前数据库的编号。 DBID(数据库名]) 例1 Print db id学生课程数据库) print db ido 例2 use master select name, db id( name), dbid from sysdata base 7. DB NAME(一求数据库的名称,函数返回值类型为 nvarchar。如 果没有指定数据库的编号,则返回当前数据库的名称。 DB NAME (database id) 例1: Print db name(dbid学生课程数据库) print db nameo
24 Select col_name(object_id('学生表'),ordinal_position) from information_schema.columns where table_name='学生表' 例 3*: Select column_name from information_schema.columns 5.DATALENGTH()—求数据的实际长度,函数返回值类型为 int ,NULL 值的长度为 NULL 例 1: Print datalength('abcdefg') select 姓名,datalength(住址) 住址长度 from 学生表 6.DB_ID()—求数据库的编号,函数返回值类型为 smallint。如果没有指 定数据库名,则返回当前数据库的编号。 DB_ID ([‘数据库名’]) 例 1: Print db_id('学生课程数据库') print db_id() 例 2*: use master select name,db_id(name) ,dbid from sysdatabases 7.DB_NAME()—求数据库的名称,函数返回值类型为 nvarchar。如 果没有指定数据库的编号,则返回当前数据库的名称。 DB_NAME (database_id) 例 1: Print db_name(db_id('学生课程数据库')) print db_name()
例2 select dbid, db name( dbid from sysdatabases order by dbid 8. HOST ID(一求服务器端计算机标识号,函数返回值类型为 nchar HOST ID O 例: print host ido 9. HOST NAME(一返回服务器计算机的名称,函数返回值类型为 HOST NAME O 10. IDENTITY(一向新表中插入 identity字段,只用于 SELECT.INTO 语句中,函数返回值类型与 data type类型相同。 IDENTITY(<data type>L seed, increment ]) AS column name data type可以是整型的分类或 decimal类型 例1 学号 as num 姓名 identity(int, 1, 1)as bh 学生表 select from cbfl 例2* 学号 as num
25 例 2*: use master select dbid,db_name(dbid) from sysdatabases order by dbid 8.HOST_ID()—求服务器端计算机标识号,函数返回值类型为 nchar。 HOST_ID () 例:print host_id() 9.HOST_NAME()—返回服务器计算机的名称,函数返回值类型为 char(8)。 HOST_NAME () 例:print host_name() 10.IDENTITY()—向新表中插入 identity 字段,只用于 SELECT…INTO 语句中,函数返回值类型与 data_type 类型相同。 IDENTITY (<data_type>[, seed, increment ]) [ AS column_name] data_type 可以是整型的分类或 decimal 类型。 例 1: select 学号 as num, 姓名 as xm, identity(int,1,1) as bh into cbf1 from 学生表 select * from cbf1 例 2*: select 学号 as num