一、新建并进入数据库
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
