存储过程和用户自定义函数

简介: 一:存储过程的简单创建,修改与删除1.创建简单的存储过程 use AdventureWorksgocreate proc spEmployeeasselect * from HumanResources.

一:存储过程的简单创建,修改与删除
1.创建简单的存储过程

use  AdventureWorks
go
create   proc  spEmployee
as
select   *   from  HumanResources.Employee
执行上面的代码就创建了一个存储过程
如果想运行这个存储过程
可以直接执行exec spEmployee这个语句
2.更改存储过程
ALTER   proc   [ dbo ] . [ spEmployee ]
as
select   top   13   *   from  HumanResources.Employee
3.删除存储过程
drop   proc  dbo.spEmployee

二:存储过程的输入参数和输出参数
1.有输入参数的存储过程
use  AdventureWorks
go
create   proc  spEmployee
    
@LastName   nvarchar ( 50 =   null
as
if   @LastName   is   null
    
select   top   13   *   from  HumanResources.Employee
else
    
select   top   10   *   from  HumanResources.Employee

查看该存储过程的结果可以用
exec spEmployee '123'
或直接exec spEmployee
存储过程的重载...
2.有输出参数的存储过程
use  AdventureWorks
go
alter   proc  spEmployee
    
@LastName   nvarchar ( 50 =   null  output
as
if   @LastName   is   null
    
begin
        
print   ' null '
        
return   ' 123 '
    
end
else
    
begin
        
print   @LastName
        
return   ' 456 '
    
end
看第一个测试该存储过程的语句
declare   @myval   nvarchar ( 50 )
exec   @myval   =  spEmployee  @myval  output
print   @myval
输出null  123
第二个测试该存储过程的语句
declare   @myval   nvarchar ( 50 )
set   @myval   =   ' xland '
exec   @myval   =  spEmployee  @myval  output
print   @myval
输出xland  456


三:用户定义函数
1.返回标量值的用户定义函数
先做一个简单的日期处理函数
把长日期缩短成短日期
Create   function  dbo.DayOnly( @date   datetime )
returns   varchar ( 12 )
as
begin  
    
return   convert ( varchar ( 12 ), @date , 101 )
end
为了测试上面的函数先做个脚本
use  Accounting
declare   @counter   int
set   @counter   =   1
while   @counter   <=   10
begin
    
insert   into  Orders  values ( 1 , dateadd (mi, @counter , getdate ()), 1 )
    
set   @counter   =   @counter   + 1
end  
然后检索这个脚本 新插入的数据记录
use  Accounting
select   *   from  orders  where  dbo.DayOnly(date1)  =  dbo.DayOnly( getdate ())
2.返回表的用户定义函数
先看例子
use  AdventureWorks
go
create   function  dbo.fnContactSearch( @LastName   nvarchar ( 50 ))
returns   table
as
return  ( select   *   from  Person.Contact  where  LastName  like   @LastName + ' % ' )
执行这个例子
use  AdventureWorks
select   *   from  fnContactSearch( ' Ad ' )
3.综合例子:返回表,有输入参数
use  xland
go
create   function  dbo.funGetMytable
    (
@id   as   int )
    
returns   @allrows   table
    (
        id  
int   not   null ,
        title  
nvarchar ( max null
    )
as
begin
    
insert   into   @allrows    select  id,title  from  mytable  where  id  =   @id
return
end  
go
执行这个例子
select   *   from  funGetMytable( 1 )
目录
相关文章
|
存储 SQL Oracle
Oracle存储过程和自定义函数
Oracle存储过程和自定义函数
88 0
|
存储 Cloud Native 关系型数据库
直播预告 | PolarDB-X 动手实践系列——PolarDB-X 的存储过程与自定义函数
为了满足更多用户和更多场景的需求,PolarDB-X 支持了兼容 MySQL 的存储过程和自定义函数。本期分享将对上述功能进行演示,并简单介绍背后的设计思路及技术原理。
直播预告 | PolarDB-X 动手实践系列——PolarDB-X 的存储过程与自定义函数
|
3月前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1月前
|
存储 关系型数据库 MySQL
Mysql表结构同步存储过程(适用于模版表)
Mysql表结构同步存储过程(适用于模版表)
32 0
|
1月前
|
存储 SQL 关系型数据库
MySQL 创建存储过程注意项
MySQL 创建存储过程注意项
29 0
|
2月前
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
|
2月前
|
存储 SQL 数据库
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
|
3月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
3月前
|
存储 SQL 关系型数据库
MySQL存储过程和存储函数的使用
MySQL的存储过程和存储函数在功能和用法上有明显的区别。存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,通过指定名称和参数(如果有)来调用执行,可以返回多个值或结果集,但不直接返回值。而存储函数则是一个有返回值的特殊存储过程,它返回一个值或表对象,可以直接嵌入SQL语句中使用,如SELECT语句中。两者都是为了提高SQL代码的重用性和性能,但使用场景和方式有所不同。
191 4