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

简介: 一:存储过程的简单创建,修改与删除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存储过程和自定义函数
108 0
|
存储 Cloud Native 关系型数据库
直播预告 | PolarDB-X 动手实践系列——PolarDB-X 的存储过程与自定义函数
为了满足更多用户和更多场景的需求,PolarDB-X 支持了兼容 MySQL 的存储过程和自定义函数。本期分享将对上述功能进行演示,并简单介绍背后的设计思路及技术原理。
直播预告 | PolarDB-X 动手实践系列——PolarDB-X 的存储过程与自定义函数
|
1月前
|
存储 SQL NoSQL
|
2月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
41 5
|
2月前
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
59 3
|
2月前
|
存储 SQL 关系型数据库
MySQL 存储过程错误信息不打印在控制台
MySQL 存储过程错误信息不打印在控制台
77 1
|
4月前
|
存储 关系型数据库 MySQL
Mysql表结构同步存储过程(适用于模版表)
Mysql表结构同步存储过程(适用于模版表)
52 0
|
4月前
|
存储 SQL 关系型数据库
MySQL 创建存储过程注意项
MySQL 创建存储过程注意项
45 0
|
5月前
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
103 0