一、新建并进入数据库
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
运行结束:
(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
方式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
无参(使用默认参)运行结果
有参运行结果:
(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'
方式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
运行结果:
(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
运行结果:
来源:https://www.cnblogs.com/yxcn/p/12258949.html