sql server存储过程学习

蹲街弑〆低调 提交于 2020-02-04 12:58:23

一、新建并进入数据库

create database Lambor

use Lambor

二、新建数据表并插入数据

create table People(
    id int primary key,
    name nvarchar(20),
    age int,
    birthday datetime
)

insert into People(id,name,age,birthday) values(1,'Amanda',1,GETDATE())
insert into People(id,name,age,birthday) values(2,'Balea',18,GETDATE())

select * from People

 

三、编写存储过程

(1)建立名为GetPeopleName的无参存储过程

create procedure GetPeopleName
as
begin
    select name from People
end
--执行
execute GetPeopleName
View Code

运行结束:

 

 

 

(2)有返回值的存储过程

create procedure AddPeople
as
begin
    insert into People(id,name,age,birthday) values(6,'Buffer',22,GETDATE());
    return 1; 
end
--常规执行语句,会提示“命令一成功执行”,但不会输出执行结果
execute AddPeople
--可输出执行结果的执行方式
USE [Lambor]
GO
DECLARE    @return_value int
EXEC    @return_value = [dbo].[AddPeople]
SELECT    'Return Value' = @return_value
GO
View Code

方式1运行结果:

 

 

 由此可以看出,常规的执行方式,输出窗口并不会打印返回值

方式二运行结果:

 

 

 

 (3)有入参的存储过程

create procedure GetPeople
@PeopleId int = 1 -- =1是指为参数添加默认值,可以不写
as
begin
    select * from People where id = @PeopleId
end
--两种执行方式
-----1.不输入参数,则系统会使用默认值
execute GetPeople
-----2.输入参数
execute GetPeople 2
View Code

无参(使用默认参)运行结果

 

 

 有参运行结果:

 

 

 

(4)有输入、输出参数的存储过程

create procedure GetPeople_Out
@PeopleId int,
@Ret nvarchar(30) output
as
begin
    if(@PeopleId < 1 and @PeopleId > 99)
    begin
        set @Ret = 'Fail';
    end 
    else
    begin
        select * from People where id = @PeopleId;
        Set @Ret='Success';
    end
end
--执行方式1
execute GetPeople_Out 1,null
--执行方式2(显示输出值)
Declare @Ret nvarchar(30)
execute GetPeople_Out 2,@Ret = @Ret output
select @Ret as N'@Ret'
View Code

方式1运行结果:

 

 

 方式2运行结果:

 

 

 

(5)有输入输出参数和结果集的存储过程

create procedure GetPeople_DS
@PeopleId int,
@Ret nvarchar(30) output
as 
begin
    if(@PeopleId < 1 and @PeopleId > 99)
    begin
        select @Ret = name from People where id = @PeopleId
    end
    else
    begin
        set @Ret ='Fail'
    end
    select * from People
end

execute GetPeople_DS 1,null
View Code

运行结果:

 

 

 

(6)存储过程中创建变量、赋值变量、创建表变量和临时表
--返回多个结果集(多个语句中可用‘;’分割,也可不用)

create procedure GetPeople_Ext
@PeopleId int
as
begin
    declare @Var nvarchar(10); --定义变量
    set @Var ='123';
    --定义表变量
    declare @PeopleTab table
    (
        ID int not null primary key,
        name nvarchar(30) not null,
        age int
    )
    --表变量只能在定义的时候添加约束
    --定义临时表
    create table #Tab
    (
        ID int not null primary key,
        name nvarchar(30) not null,
        age int
    );
    --临时表可以创建之后添加约束
    alter table #Tab add constraint S_UNIQUE unique(Name);

    --判断入参是否有效,if有效则向表变量插入语数据
    if(@PeopleId > 0)
    begin
        --从现有表中取出数据插入表变量
        insert into @PeopleTab(id,name,age) 
        select id,name,age from People where id = @PeopleId;

        --从现有表取出数据插入临时表
        insert into #Tab(ID,Name,age)
        select id,name,age from People where id = @PeopleId
    end
    select * from @PeopleTab
    select * from #Tab
end
--执行存储过程
execute GetPeople_Ext 1
View Code

运行结果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!