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

原文地址:https://www.cnblogs.com/Bloghjb/p/9360048.html

时间: 2024-08-01 21:50:58

SQL server数据库之存储过程的相关文章

SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?

本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时候一个一个显式地删除过程中定义的临时表(drop table #tName),有些人又没有这个习惯,对于不明真相的群众或者喜欢思考的人会问,存储过程中定义的临时表,最后要不要主动删除,为什么?或者说是不是存储过程结束的时候删除临时表更加规范?不止一个人问过这个问题了,说实在话,本人之前确实不清楚,只

SQL server 数据库危险存储过程删除与恢复

SQL的扩展的删除与恢复 删除 use master exec sp_dropextendedproc 'xp_cmdshell' exec sp_dropextendedproc 'xp_dirtree' exec sp_dropextendedproc 'xp_enumgroups' exec sp_dropextendedproc 'xp_fixeddrives' exec sp_dropextendedproc 'xp_loginconfig' exec sp_dropextendedp

SQL Server数据库备份(本机)

基础的SQL Server数据库备份存储过程 /****************************************************************************************************** ** 功能:本机备份数据库 ** 作者:Danny,Li ** 日期:2012-11-05 ** --------------------------------------------------------------------------

SQL Server数据库存储过程中拼接字符串注意的问题

在SQL Server数据库中书写复杂的存储过程时,一般的做法是拼接字符串,最后使用EXEC sp_executesql '拼接的字符串' 查询出结果. 先看一段代码: 1 -- ============================================= 2 -- Author: XXX 3 -- Create date: 2014-09-19 4 -- Description: 获取学生列表信息 5 -- ====================================

利用存储过程来重命名SQL Server数据库

最近遇到一个需要在多用户模式下重新命名数据库的Case, 因为数据库可能被其他用户使用,所以直接修改可能会失败.对于此种情况,我们可以等所有用户结束使用数据库时修改,或者是将数据库切换到单用户模式下进行操作. 有时候,我们在开发过程中需要直接把生产环境的数据库拿到开发环境来测试开发.我们可以直接重命名生产环境上的数据库.这样以来,即使你有些SQL没有保存,也可以直接从原来的数据库中抓取. 有两个重要的细节我们必须注意 当重名名数据库时, filegroup的名字和数据文件名(.mdf,.ldf)

C#与sql server数据库存储过程的操作实例

通过这几天的学习和实际操作,把C#与sql server数据库存储过程的操作搞清楚了. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.

[转]C#操作SQL Server数据库

转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用: 第三,对SQL或存储过程执行后返回的“结果”进行操作. 对返回“结果”的操作可以分为两类: 一是用SqlDataReader直接一行一行的读取数据集: 二是DataSet联合SqlDataAdapter来操作数据库. 两者比较: SqlDataRead

50种方法优化SQL Server数据库查询(转载)

原文地址:http://www.cnblogs.com/zhycyq/articles/2636748.html 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存不足 5.网络速度慢 6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) 8.sp_lock,sp_who,活动的用

SQL Server数据库性能优化之SQL语句篇(转载)

SQL Server数据库性能优化之SQL语句篇 原文地址:http://www.blogjava.net/allen-zhe/archive/2010/07/23/326927.html 期项目需要,做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享.SQL Server性能优化涉及到许多方面,如良好的系统和数据库设计,优质的SQL编写,合适的数据表索引设计,甚至各种硬件因素:网络性能.服务器的性能.操作系统的性能,甚至网卡.交换机等.这篇文章主