Sqlserver中存储过程,触发器,自定义函数

1.存储过程有关内容
存储过程的定义;
存储过程的分类;
存储过程的创建,修改,执行;
存储过程中参数的传递,返回与接收;
存储过程的返回值;
存储过程使用游标。

1.1存储过程的定义:存放在服务器上预先编译好的sql语句,可以给存储过程传递参数,也可以
从存储过程返回值。

优点:提供了安全访问机制,比如可以将不同的存储过程的执行权限赋予权限不同的用户;
改进了执行性能,因为存储过程是预编译的;
减少了网络流量,因为在调用存储过程时,传递的字符串很短,没有很长的sql语句;
增强了代码的重用性。

1.2分类:系统存储过程,sp_开头;
扩展存储过程,xp_开头,允许其他高级语言编写,如c#,以dll形式存在;
用户自定义存储过程:
T_SQL存储过程;
临时存储过程;
局部:命名以 # 开头;
全局:命名以 ## 开头;
CLR存储过程。

1.3存储过程的创建,修改,执行:
首先确定三个组成部分:
输入参数和输出参数;
sql语句;
返回的状态值,指明执行状态。

简单语法:
eg1:查询指定数据库表orders中的记录个数

1 create proc CountOfOrders--指定存储过程名  
2     as--指定存储过程的主体  
3      begin  
4       declare @CountOfOrders as int--声明一个作为int类型的存储过程的内部变量  
5       select @CountOfOrders = Count(*) fromt orders--将sql语句的返回值赋给前面定义的变量  
6       print convert(verchar(10),@CountOfOrders)--将变量转换为字符串型打印  
7      end  
8     go--确定一个执行计划  
9     exec CountOfOrders--执行过程 

以stuinfo表为例子:

1 create     proc countofinfoq
2         as
3         begin
4             declare @CountOfOrders as int--声明一个作为int类型的存储过程的内部变量  
5             select @CountOfOrders = Count(*) from stuDB.dbo.stuInfo--将sql语句的返回值赋给前面定义的变量  
6             --print convert(varchar(10),@CountOfOrders)--将变量转换为字符串型打印  
7             print @CountOfOrders
8         end
9         exec countofinfoq

eg2:查询任意数据库表的记录个数,这里需要指定参数,要注意参数的定义和执行的时的参数传递

 1 create proc CountOfTable  
 2    @TableName as Varchar(20)--定义一个普通的参数  
 3    as  
 4     begin  
 5      declare @Count as int  
 6      exec('select * into tmptable from ' + @TableName)--参数的使用方法,这里exec相当于调用一个新的存储过程  
 7      select @Count=Count(*) from tmptable--用临时表缓存原表的数据,对临时表操作完后,删除临时表  
 8      drop table tmptable  
 9      return @Count--存储过程的返回值,只能是整数值!!!  
10     end  
11    declare @Count as int   --声明一个变量接收返回值  
12    exec @Count=CountOfTable 仓库    
13    print @Count  

以stuinfo表为例子:

 1  select * from stuinfo
 2  drop table stuinfobak1
 3  select * into stuDB.dbo.stuinfobak1 from stuinfo
 4  go
 5  create proc CountOfTable1 
 6    @TableName as Varchar(20)--定义一个普通的参数  
 7    as  
 8     begin  
 9      declare @Count as int  
10      exec('select * into stuDB.dbo.stuinfobak2 from ' + @TableName)--参数的使用方法,这里exec相当于调用一个新的存储过程  
11      select @Count=Count(*) from stuDB.dbo.stuinfobak2--用临时表缓存原表的数据,对临时表操作完后,删除临时表  
12      drop table stuinfobak2  
13      return @Count--存储过程的返回值,只能是整数值!!!  
14     end  
15   go
16    declare @Count as int   --声明一个变量接收返回值  
17    exec @Count=CountOfTable1     stuinfo
18    print @Count
View Code

相关文章:

  • 2022-01-02
  • 2022-03-02
  • 2021-09-27
  • 2021-07-19
  • 2022-12-23
  • 2022-12-23
  • 2021-10-15
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-14
  • 2021-08-23
  • 2021-09-25
  • 2021-10-07
  • 2021-12-02
  • 2022-12-23
相关资源
相似解决方案