SQL server数据库之存储过程

Posted bloghjb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server数据库之存储过程相关的知识,希望对你有一定的参考价值。

在说存储过程之前我们先说一下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

以上是关于SQL server数据库之存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Java调用SQL Server的存储过程详解(转)

SQL Server 2008之存储过程的设计和实现

Sql语法高级应用之三:存储过程

Sql Server数据库之存储过程

存储过程系列之调试存储过程 SQL Server 2005

存储过程系列之调试存储过程 SQL Server 2005