sql中的函数(4) 系统函数,事务、游标、存储过程及触发器

系统函数

1.        app_name 如果应用程序进行了设置,返回当前会话的应用程序名称。
例如:
        Use northwind
        Go
        Declare @currentapp varchar(35)   //声明局部变量保存函数返回值
        Set @currentapp = app_name()   //调用函数返回当前应用程序的名称
        Select @currentapp // 显示应用程序的名称
2.        case 计算条件列表并返回多个可能结果表达式之一。
数据原型:
        Case input_expression
               When when_expression then result_expression
               [….n]
               Else else_result_expression
                     End
3.        cast 将某种数据类型的表达式显式转换为另一种数据类型。
原型:
       Cast (expression as data_type)
4.        convert 将某种数据类型的表达式显式转换为另一种数据类型。
原形:
        Convert (data_type[(length)],expression [,style])
5.        coalesce 返回参数中第一个非空表达式。
例如:
       Use northwind
       Select cast(coalesce(region,companyname) as char) ‘companyregion’
       From suppliers
6.        collationproperty 返回给定排序规则的属性。
原型:
        Collationproperty (collation_name,property)
       例如:
              Use northwind
              Select collationproperty(‘traditional_spanish_cs_as_ks_ws’,’codepage’)
7.        current_timestamp 返回当前的日期和时间。
8.        current_user 返回当前的用户名。
9.        datalength 返回任何表达式所占用的字节数。
10.    @@error 返回最后执行的transact-sql语句的错误代码。
例如:
        Use northwind
        Declare @del_error int, @ins_error int //声明局部变量保存函数返回结果
        Begin tran //开始一个事务
        Delete shippers //执行delete操作
        Where shippers=6  
        Select @del_error = @@error   //设置变量保存delete错误操作
        Insert into shippers(shipperid,companyname) //执行insert操作
        Values(6,’microsoft’)
        Select @ins_error = @@error 设置变量保存insert操作错误
        If @del_error = 0 and @ins_error=0   //测试返回值
        Begin
        Print ‘the author information has been replaced’   //如果以上两个操作全部成功,
则提交事务。
        Commit tran
        End
        Else    //以上两操作失败
        Begin
               If @del_error<>0    //判断是否delete操作失败
               Print ‘an error occurred during execution of the delete’ //打印输出信息
               If @ins_error <>0   //判断是否insert 操作失败
               Print ‘an error occurred during execution of the insert’ //打印输出信息
        Rollback tran   //事务回滚
        end
11.    fn_helpcollations //返回sql server 2000支持的所有排序规则的列表。
例如:
       Use northwind
       Select * from ::fn_helpcollations //显示函数返回的系统所有排序规则列表
12.    fn_serversshareddrives 返回由群集服务器使用共享驱动器名称。
13.    fn_virtualfilestats 返回对数据库文件(包括日志文件)的I/O统计。
原型:
        Fn_virtualfilestats([@databaseid=]databasei_d,[@fileid=] file_id)
返回的参数说明: Column Name
 数据类型
 描述
 
DbId smallint 数据库 ID
FileId smallint 文件 ID
TimeStamp int 提取数据的时间
NumberReads bigint 在文件上发出的读取次数
NumberWrites bigint 在文件上写入的次数
BytesRead bigint 在文件上发出的读取字节数
BytesWritten bigint 在文件上写入的字节数
IoStallMS bigint 用户等待在文件上完成 I/O 活动的总计时间(以毫秒为单位)


例如:
Use master
Declare @dbid int
Select @dbid=dbid from master..sysdatabases
   Where name=’northwind’
Use northwind
     Select * from ::fn_virtualfilestats(@dbid,1)
14. formatmessage 从sysmessage 现有的消息构造消息。
原型:
Formatmessage(msg_number,param_value [,….n])
例如:
Use master
Exec sp_addmessage 50001,16,N’the number of rows in %s is %1d’,   //执行存储过
程,增加一条客户信息
@lang = ‘us_english’
Use northwind
Declare @val varchar(100)   //声明变量保存返回值
Set @val=formatmessage(50001,’table1’,5) // 构造文本消息
Select @val
15. getansinull 返回会话的数据库的默认为空性。
原型:
Getansinull([‘database’])
16. host _id 返回工作站标识号。
17. host_name 返回工作站名称。
原型:
Host_name()
例如:
Use northwind
   Select host_name()
18. ident_current 返回任何会话和任何作用域中的指定表最后生成的标识值。
原型:
Ident_current(‘table_name’)
例如:
Use northwind
Select inde_current(‘shippers’)
19. ident_incr 返回指定表或视图增量值(返回形式为numeric(@@maxpercision,0)),该值
是在带有标识列的表或视图中创建标识列是指定的。
原型:
Ident_incr(‘table_or_view’)
例如:
Use northwind
Select ident_incr(‘shippers’)
20. ident_seed 返回指定的表或视图增量值种子值(返回形式numeric(@@maxprcision,0)),
该值是在带有标识列的表或视图中创建标识列是指定的。
21. @@identity 返回最后插入的标识值。
例如:
Use northwind
Set identity_insert shippers on
Insert into shippers (shipperid,companyname)
Values(6,’microsoft’)
Select @@identity //显示返回最后插入的标识值
Delete from shippers where shipperid=6
22 . identity 有在带有into table 子句的select 语句中,以将标识列插入到新表中。
原型:
Identity(data_type [, seed,increment])
例如:
Use northwind
Select productname, identity(smallint,100,1) as productID,unitprice
Into test
From products
Drop table test
24. isdate 确定输入表达式是否为有效的日期。
原型:
Isdate(expression)
25. isnull 使用指定的值替换null。
原型:
Isnull(check_expression,replacement_value)
26. newid 创建uniqueidentifier类型的唯一值。
Declare @myid uniqueidentifiler
Set @myid =newid()
Print ‘value of @myid is : ’+ convert(varchar(255),@myid)
27. nullif 如果两个指定的表达式相等,则返回的是空值;如果不相等则返回第一个表达式。
原型:
Nullif(expressiion,exprssion)
28. parsename 返回对象的指定部分。
原型:
Parsename(‘object_name’,object_piece)
参数说明: Value
 描述
 
1 对象名
2 所有者名称
3 数据库名称
4 服务器名称
例如:  
Use northwind  
Select parsename(‘pubs..products’,1) as ‘object name’  
Select parsename(‘pubs..products’,2) as ‘object name’  
Select parsename(‘pubs..products’,3) as ‘object name’  
Select parsename(‘pubs..products’,4) as ‘object name’  
29.    permissions 返回一个包含位图的值,表明当前用户的语句、对象或列的权限。  
原型:  
        Permissions([objectid[, ‘column]])  
参数说明:
下表显示语句权限所使用的位(未指定 objectid)。 位(十进制)
 位(十六进制)
 语句权限
 
1 0x1 CREATE DATABASE(仅限于 master 数据库)
2 0x2 CREATE TABLE
4 0x4 CREATE PROCEDURE
8 0x8 CREATE VIEW
16 0x10 CREATE RULE
32 0x20 CREATE DEFAULT
64 0x40 BACKUP DATABASE
128 0x80 BACKUP LOG
256 0x100 保留
下表显示当仅指定 objectid 时,返回的对象权限所使用的位。 位(十进制)
 位(十六进制)
 语句权限
 
1 0x1 SELECT ALL
2 0x2 UPDATE ALL
4 0x4 REFERENCES ALL
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE(仅限于过程)
4096 0x1000 SELECT ANY(至少一列)
8192 0x2000 UPDATE ANY
16384 0x4000 REFERENCES ANY
下表显示当同时指定 objectid 和 column 时,返回的列级对象权限所使用的位。 位(十进制)
 位(十六进制)
 语句权限
 
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES
例如:
Use northwind
If permissions()&2=2
Begin
   Print ‘the current user can create a table.’
   Create table test (coll int)
End
Else
   Print ‘error :the current user cannot create a table.’
Drop table test
30. @@rowcount 返回受上一语句影响的行数。
例如:
Use northwind
Set identity_insert shippers off
Insert into shippers values(‘ibm’,null)
Select @@rowcounat
From shippers
Delect from shippers where companyname = ‘ibm’
31. rowcount_big 返回受执行的最后一个语句影响的行数。使用和@@rowcount一样。
32. scope_identity 返回插入到同一作用域中的identity列中的最后一个identity值。
33. serverproperty 返回有关服务器实例的属性信息。
34. sessionproperty 返回会话的set 选项设置。
原型:
Sessionproperty(option)
Option参数: 选项
 描述
 
ANSI_NULLS 指定是否对空值上的等号 (=) 和不等号 (<>)应用遵从 SQL-92 标准行为。 1 = ON 0 = OFF
ANSI_PADDING 控制列存储小于定义的列大小的值的方式,以及列存储在字符串和 binary 数据中有尾随空格的值的方式。 1 = ON 0 = OFF
ANSI_WARNINGS 指定是否对某些情况(包括被零除和算术溢出)生成错误信息或警告应用 SQL-92 标准行为。 1 = ON 0 = OFF
ARITHABORT 确定在执行查询过程中发生溢出或被零除的错误时是否终止查询。 1 = ON 0 = OFF
CONCAT_NULL_YIELDS_ NULL 控制是将串联结果视为空值还是空字符串值。 1 = ON 0 = OFF
NUMERIC_ROUNDABORT 指定当表达式中的四舍五入导致精度降低时是否生成错误信息和警告。 1 = ON 0 = OFF
QUOTED_IDENTIFIER 指定是否遵从 SQL-92 关于使用引号分隔标识符和文字字符串的规则。 1 = ON 0 = OFF
<任何其它字符串> NULL = 无效的输入

35. session_user 允许在末指定默认值时,将系统为当前会话的用户名提供的值插入到表
中。还允许在查询、错误信息等中使用用户名。
例如:
Use northwind
Declare @session_usr char(30)
Set @session_usr = session_user
Select ‘this session’’ s current user is : ’ + @session_usr
36. stats_date 返回最后一次更新指定索引统计的日期。
例如:
Use nortywind
Create index ship_index1 on shippers(shipperid,companyname)
Waitfor delay ’00:00:20’
Drop index shippers.ship_index1
Select ‘index name’=i.name, ‘statisticcs date ’= stats_date(i.id,i.indid)
From sysobjects o ,sysindexes i
Where o.name= ‘shippers’ and o.id=i.id
37. system_user 返回登录标识名称。
38. @@trancount 返回当前连接的活动事务数。
39. user_name 返回给定标识号的用户数据库用户名。
例如:use nortywind
Select user_name(2)
Select user_name()
Select name from sysusers where name=user_name(1)

系统统计函数

1.cpu_busy 返回自上次启动microsoft sql server 以来CUP的工作时间。
2.idle 返回microsoft sql server 自上次启动后闲置的时间。
3.io_busy 返回microsoft sql server 自上次启动后用于执行输入和输出操作的时间。
4.packet_errors 返回microsoft sql server 自上次启动后,在microsoft sql server 连接上发生的网络数据包错误数。
5.pack_received 返回microsoft sql server 自上次启动后从网络上读取的输入数据包数目
6.pack_sent 返回sql server自上次启动后,写到网络上的输出数据包数目。
7.timeticks 返回一刻度的微秒数。
8.total_errors 返回sql server 自上次启动后,所遇到的磁盘读/写错误数。
9.total_read 返回microsoft sql server 自上次启动后读取磁盘的次数。
10.total_write 返回 microsoft sql server 自上次启动后写入磁盘的次数。

事务、游标、存储过程及触发器  

事务的使用:  
1.begin distributed transaction 指定一个事务的起始。  
原型:  
        Begin destributed tran [ saction] [transaction_name! @tran_name_variable]  
例如:  
        Use northwind   
        Begin destributed transaction //开始一个分布式事务  
        Update empoyees       //对表empolees 进行更新  
        Set firstname=’mcdonald’ where homephone = ‘(206) 555-9875’  
        Commit transaction    //结束事务  
        Go  
2.commit transcation 指明事务结束。  
3.rollback transcation 撒销对数据库作出的所有改变,返回到事务开始之前的状态。  
原型:  
        Rollback [tran [saction] [transaction_name] @tran_name_variable | savepoint_name |  
@savepoint_variable]  
       参数说明:  
        Transadtion 给begin transaction上的事务指派的名称。  
        @tran_name_bariable 用户定义的、含有有效事务名称的变量名称。  
        Savepoint_name 是来自SAVE TRANSACTION语句的svepoint_name。  
        @savepoint_variable 是用户定义的、含有有效保存点名称的变量的名称。  
      例如:  
        Begin transaction royaltychange //事务开始  
        Update titleauthor //更新表  
            Set royaltyper = 65   //重设参数  
            From titleauthor,titles   
            Where royaltyper=75   
                And titleauthor.title_id=titles.title_id  
                And title=’The Gourmet Microwave’  
        Update titleauthor  
            Set royaltype = 15  
            From titleauthor, titles  
            Where royaltyper=25  
            And titleauthor.title_id=titles.title_id  
            And title = ‘The Gourmet Microwave’  
        Save transaction percentchanged //在事务内设置保存点  
        Update titles   
            Set price = price* 1.1  
            Where title =’The Gourmet Microwave’  
        Select (price * royalty * ytd_sales)* royaltyper  
            From titles,titleauthor  
            Where title=’The Gourmet Microwave’  
            And titles.title_id=titleauthor.title_id  
        Rollback transaction percentchanged //回到先前保存过的保存点  
        Commit transaction   // 事务结束  
4.save transaction 在事务内设置保存点。  
5.commit work 标志事务的结束。  
6.rollback work 将用户的事务回滚到事务的起点。
  
游标的使用:  
1.declare cursor 定义游标结构并分配资源。  
原型:  
    Declate cursor_name [insensitive] [scorll] cursor for select_statement [for { read    
Only | update }[of column _list]]   
            或者:  
            Declare cursor_name cursor [local | global] [forward_only | scroll] [static | keyset |  
dynamic] [read_only | scroll_locks | optimistic] for [select _statement  
[ for {read only | update } [of column_list]]]  
        参数说明:  
        INSENSITIVE 指明要为检索到的结果集建立一个临时拷贝,以后的数据从这个临时拷贝中获取。原有基表中数据发生了改变,对于游标而言是不可见的。这种不敏感的游标不允许数据更改。  
        SCROLL 指明游标可以在任意方向上滚动。忽略该选项,则游标只能向前滚动。  
        SELECT_SATAEMENT 指明SQL语句建立的结果集。  
        READ ONLY 指明在游标结果集中不允许进行数据更改。  
        UPDATE 指明游标结果集可以进行修改。  
        OF COLUMN_LIST 指明结果集中可以进行修改的列。缺省时(使用UPDATE关键字),所有的列都可进行修改。  
        LOCAL 指明游标是局部的,只能在它所声明的过程中使用。全局的游标在连接激活的任何时候都是可用的。只有池连接结束时,才不再可用。  
        GLOBAL 使用游标对于整个连接全局可见。  
        FORWARD_ONLY 指明游标只能向前滚动。  
        STATIC 与INSENITIVE的游标相同。  
        KEYSET 指明选取的行的顺序。  
        DYNAMIC 指明游标反映所有对结果集的修改。  
        SCROLL_LOCK 对修改或删除加锁。保证游标操作成功。  
        OPTIMISTIC 指明哪些通过游标进行的修改或者删除将不会成功。  
    例如:  
        Use northwind   
        Go   
        Declare customers_cursor cursor    //定义游标  
        For select companyname , address,phone //选择部分属性  
        From customers   
        Where city=’london’  
        For read only //只读游标  
        Deallocate customers_cursor   //删除游标  
2.deallocate 删除游标定义,释放资源。  
3.open 打开游标。  
原型:  
    Open { { [global] cursor_name } | cursor_variable_name }  
    例如:  
        Use northwind   
        Go  
        Declare employee_cursor cursor for   //定义游标  
        Select lastname,firstname   
        From northwind .dbo.employees   
Where firstname like ‘m%’  
Open employee_cursor   // 打开游标  
Fetch next from employee_cursor   //利用游标提取数据  
While @@fetch_status=0   //当利用FETCH提取数据成功时,运用循环提取下一条数据  
Begin   //循环体开始处  
    Fetch next from employee_cursor  
End    //循环体结束  
close employee_cursor    //关闭游标  
Deallocate employee_cursor   // 释放游标  
4.close 关闭游标并释放结果集。  
5.fetch 通过游标从结果集中取值。  
     原型:  
        Fetch [next | prior | first | last | absolute {n | @nvar} | relative {n | @nvar}] from [global]  
             Cursor_name} | cursor_variable_name } [into @variable_name ] [,……n]  
    参数说明:  
        NEXT 指明从当前的行的下一行取值。  
        PRIOR 指明人当前行的前一行取值。  
      &n, bsp; FIRST 结果集的第一行。  
        LAST   结果集的最后一行。  
        ABSOLUTE n表示结果集中的第n行。该行数同样可以通过一个局部变量传播。  
        RELATIVE n表示要取出折行在当前的前n行或后n行的位置上。如果该值为正数则要取出的行在当前行前n行的位置上,如果该值为负数,则返回当前行的后n行。  
        INTO @cursor_variable_name 表示游标列值存储的地方的变量列表。变量的数据类型也应该与被选择列的数据类型相同。直到下一次使用FETCH语句之前,变量中的值都会一直保持。  
    函数返回值:  
        利用@@FETCH_STATUS返回FETCH状态。  
        0:FETCH 成功。  
        1:FETCH 失败或超出设置范围。  
        2:提取的数据行丢失。  
    例如:  
        Open employee_cursor  
        Fetch next from employee_cursor  
        While @@fetch_status = 0   
        Begin   
        Fetch next from employee_cursor  
        End       
        Close employee_curssor
  
存储过程的使用:  
1.create procedure 创建存储过程。  
原型:  
        Create proc [edure] procedure_name [; number]  
        [{@parameter data_type} [varying] [ = default] [output]] [,…n]  
        [ with {recomple | enplication | recompile , encryption }] [for replication]  
        As sql_statement […n]  
    参数说明:  
        Procedure_name 新存储的过程。对于数据库及其所有者必须惟一。创建局部临时过程,在procedure_nameu前加一个编号符#;创建全局临时过程,在procedure_nameu前加两个编号符##。完整的名称不能超过128个字符。  
        Number 对同名的过程分组。  
        @parameter 过程中的参数。  
        Data_type 参数的数据类型。除table之外的其他所有数据类型均可以用伯存储过程的参数。Cursor数据类型只能用于output参数。

posted on 2009-01-10 15:14  冉元胜  阅读(489)  评论(0编辑  收藏  举报

导航