在说存储过程之前我们先说一下SQL server数据库的一些基本语法



-- 0、 Sql server中的代码块
/*
类似于各种开发语言,sql server也具有代码块的分割,大部分语言代码块用大括号分割({})*/
begin
end
--用于sql server数据库中的代码分割

-- 一、 变量的定义、赋值、输出
declare @a int--定义变量
set @a=5 --变量赋值
print @a --打印变量的值
  
--使用select语句赋值 
--select既可以用于变量赋值也可以用于输出变量,当输出变量用时跟我们查询语句中的相同
declare @user1 nvarchar(50) 
select @user1='张三'--定义变量
select @user1--输出变量

-- 二、 表、临时表、表变量
--创建临时表
create table #DU_User1 
( 
     [ID] [int]  NOT NULL, 
     [Oid] [int] NOT NULL, 
); 
--向临时表插入记录 
insert into #DU_User1 (ID,Oid) values (100,2); 
--定义表变量 
declare @t table
( 
    id int not null, 
    msg nvarchar(50) null
) ;
--向表变量插入记录 
insert into @t table (ID,msg ) values (100,'123'); 

-- 三、 循环 while循环求1到100的和 (sql server中只有while循环)
declare @a int
declare @sum int
set @a=1 
set @sum=0 
while @a<=100 
begin
    set @sum+=@a 
    set @a+=1 
end
select @sum

-- 四、条件语句
--if,else条件分支 
if(1+1=2) 
begin
    print '对'
end
else
begin
    print '错'
end
  
--when then条件分支 
declare @today int
declare @week nvarchar(3) 
set @today=3 
set @week=case
    when @today=1 then '星期一'
    when @today=2 then '星期二'
    when @today=3 then '星期三'
    when @today=4 then '星期四'
    when @today=5 then '星期五'
    when @today=6 then '星期六'
    when @today=7 then '星期日'
    else '值错误'
end
print @week

-- 五、游标

declare @ID int
declare @Oid int
declare @Login varchar(50) 
  
--定义一个游标 
declare user_cur cursor for select ID,Oid,[Login] from ST_User 
--打开游标 
open user_cur 
while @@fetch_status=0 
begin
--读取游标 
    fetch next from user_cur into @ID,@Oid,@Login 
    print @ID 
    --print @Login 
end
close user_cur 
--摧毁游标 
deallocate user_cur



 

sql server数据库中存储过程可分为两种:

一、系统存储过程

系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。尽管这些系统存储过程在master数据库中,但我们在其他数据库还是可以调用系统存储过程。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。



--常用的系统存储过程
exec sp_databases; --查看数据库
exec sp_tables;        --查看表
exec sp_columns student;--查看列
exec sp_helpIndex student;--查看索引
exec sp_helpConstraint student;--约束
exec sp_stored_procedures;
exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
exec sp_rename student, stuInfo;--修改表、索引、列的名称
exec sp_renamedb myTempDB, myDB;--更改数据库名称
exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
exec sp_helpdb;--数据库帮助,查询数据库信息
exec sp_helpdb master;



二、用户自定义存储过程

用户自定义存储过程是用户未完成某些业务或功能而封装好的一条或多条sql语句的对象,一个复杂的数据操作。如果你在前台处理的话。可能会涉及到多次数据库连接。但如果你用存储过程的话。就只有一次。从响应时间上来说有优势。

下面我们再说一下用户自定义的存储过程。



--创建存储过程语法
create proc | procedure pro_name
    [{@参数} {参数类型}[output], {@参数}{参数类型} [output]] as --SQL_statements



--存储过程使用
execute pro_name[{@参数}[output],{@参数} [output]]




--例如:
--定义一个叫proc_name的存储过程
create procedure proc_name
@a1 int,@p1 int output--变量p1为输出参数
as
select @p1=count(*) from table where id=@a1

--使用proc_name这个存储过程
declare @a1 int ,@p1 int
set @a1=1
execute proc_name @a1,@p1 output