• sql 学习笔记之:存储过程和用户自定义函数


    sql 学习笔记之:存储过程和用户自定义函数
    2009-05-21 13:28

    一:存储过程的简单创建,修改与删除
    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)
    keim,毕业于安徽科技学院理学院,2003年开始对Web开发有浓厚的兴趣,并专注于C#/java Web开发,软件架构设计、分布式相关、项目管理、前端设计等等,实战派...
  • 相关阅读:
    excel上传和下载
    SublimeText快捷键大全(附GIF演示图)
    JS求多个数组的重复数据
    js各种宽高(3)
    js各种宽高(2)
    js各种宽高(1)
    echarts简单使用案例
    js小技巧
    原生jdbc执行存储过程
    Cron和Spring定时任务
  • 原文地址:https://www.cnblogs.com/zqmingok/p/1486910.html
Copyright © 2020-2023  润新知