关于SQL 存储过程入门基础(基础知识)

大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧。为了以后发展,决定从零开始学习下。

这里看看存储过程的定义,

存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行。

在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。

  系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server。

常用系统存储过程有:

代码如下:

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;

用户自定义存储过程是由用户创建,并能完成某一特定功能,如:查询用户所需数据信息的存储过程。

这里我们看看存储过程的好处;

(1)重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。

(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。

(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。

(4)安全性。参数化的存储过程可以防止SQL注入式的攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

好了,我们来看看创建的基本语法


代码如下:

定义存储过程的语法

CREATE  PROC[EDURE]  存储过程名

@参数1  数据类型 = 默认值,

…… ,

@参数n  数据类型 OUTPUT

AS

SQL语句

GO
,参数是可选的
,参数分为输入参数、输出参数
,输入参数允许有默认值

这里来创建一个简单的存储过程

CREATE PROCEDURE UserLogin
@name varchar(20),
@password varchar(20)

AS

-- 定义一个临时用来保存密码的变量
--DECLARE @strPwd NVARCHAR(20) 这里先不介绍变量。稍后的文章会详细讲到
BEGIN
select * from userinfo where userName=@name and userPass=@password
END
GO

首先我们用简单的sql查询

select * from userinfo where userName='admin'

查询结果:

---------------------

UserName  UserPass

Admin      Admin

现在我们来执行我们的存储过程
exec UserLogin admin,admin

--或这样调用:
EXEC UserLogin @name='admin',@password='admin'

查询结果:

---------------------

UserName  UserPass

Admin      Admin

注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“UserLogin”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择"可编程性->存储过程",此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。

看到了在数据中调用存储过程的方法有两种(这里EXEC与EXECUTE等效);

EXEC  过程名  参数值1,参数值2,....

或者

EXEC 参数1=参数值1,参数2=参数值2....

上面我们也看到了。

如果要删除一个存储过程,用drop

像这样

代码如下:

drop PROCEDURE UserLogin

创建这样的存储过程有什么用呢,不是只能在数据中查看赛。

我们在做web或者winform 程序,假设需要个登录,好,我们可以调用用这个存储过程来登录,根据传入的参数,如果查询出来有记录,那么这条记录在数据库中存在,表示登录成功,否则失败。

这样做的目的更加安全,可以防止sql注入。

(0)

相关推荐

  • 关于SQL 存储过程入门基础(变量)

    上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用. 变量分文局部变量和全局变量 局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲. 在c# 语言中,定义一个变量很简单,例如 复制代码 代码如下: int i=0; --定义加赋值. 在sql中,定义一个变量需要关键字DECLARE,还需要个特殊符号标记(@)表示是变量. 看看简单的声明语法: 复制代码 代码如下: Declare @Local_Var data_type @Loc

  • 关于SQL 存储过程入门基础(基础知识)

    大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧.为了以后发展,决定从零开始学习下. 这里看看存储过程的定义, 存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行. 在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程. 系统SP,主要存储master 数据

  • 关于SQL 存储过程入门基础(流程控制)

    这里我们讲一下存储过程的流程控制, if else,case ,while,这里没有for循环的 ,这些跟c,c++,c#等语言都差不过的. 一,首先来看if  else使用 复制代码 代码如下: if 条件beginsql 语句endelse beginsql语句end 看个简单例子 复制代码 代码如下: declare @id int           --声明个变量set @id=5                 --设置厨初始值if(@id=1)    begin        pr

  • Oracle PL/SQL语言入门基础

    正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

  • C语言入门之基础知识详解

    一.思维导图 内容不限于此思维导图 二.环境搭建 对于老手,自动跳过这一趴吧,或者也可以看一下我有没有啥纰漏,毕竟小白需要这一趴. 编译器很多,大部分老师会在学生学习C语言的时候推荐使用VC,不带语言提示器的那种,说是可以提高学生的编码能力.我也不知道到底是不是这么一回事儿.我推荐使用VS,这样学的快,函数记不住的问题很严重吗?项目的车轮碾压过去,再记不住也得记住吧!!! 更何况这个系列到后面是会有需要用文本文件编程写项目的阶段. 下载VS2019社区版,不要标新立异选那些最新版的,出了问题到时

  • 土人系列AS入门教程--基础篇

    我写的这些教程,目的是希望初学Flash的爱好者们能多动手,少提问.我下面这些教程面象有 Flash(MX) 基础操作知识的读者. AS基础 ----------------------------------- 做过Flash动画的Flash爱好者们都知道,要做好一个Flash动画,AS是必不可少的,即使只是很简单的几句代码也能起到整个Flash画龙点睛的作用.这里我只简单的介绍一下AS的基本常识. 首先我们要了解AS要写在什么地方,什么时候AS会被触发执行. 1.帧: 写在关键帧上面的AS,

  • Python入门之基础语法详解

    一.我的经历及目标 在学习python之前:我学习过C/C++,在学校期间做过很多的项目,已经有两年多了,算是对C/C++非常的熟悉了,精通不敢说,但是对于面向过程和面向对象有很深刻的认识,做过很多的开发,学习数据库,MFC, QT, linux下利用C/C++进行服务器的开发,QT环境下进行模拟QQ的开发- 听说python挺火的,我也来尝试一门新的语言,python和c有80%的相似性,毕竟是用C来开发的语言,但是是面向过程的一门语言,有C++的继承等相似的特性,感觉更有信心学会它了,毕竟可

  • python入门jupyter基础操作及文本用法

    目录 1.jupyter简介 2.jupyter基础操作 2.1windows更新pip库 2.2jupyter安装 2.3初次启动jupyter 2.4设置密码进入jupyter #再次运行jupyter 3.创建一个jupyter文本 4.jupyter文本的用法 4.1保存和下载文本 4.2运行和切换代码 4.3多个代码运行 1.jupyter简介 Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码.方程式.可视化和文本的文档. 它的用途包括:数据清理和

  • python入门语句基础之if语句、while语句

    目录 一.if语句 二.while语句 一.if语句 if 语句让你能够检查程序的当前状态,并据此采取相应的措施.if语句可应用于列表,以另一种方式处理列表中的大多数元素,以及特定值的元素 1.简单示例 names=['xiaozhan','caiyilin','zhoushen','DAOlang','huangxiaoming'] for name in names: if name == 'caiyilin': #注意:双等号'=='解读为"变量name的值是否为'caiyilin' pr

  • Vue基础语法知识梳理下篇

    目录 计算属性 键盘事件 监视属性 绑定样式 class样式 style样式 条件渲染 v-if v-show 列表渲染 v-for指令 vue监测data中的数据 收集表单数据 计算属性 定义:要用的属性不存在,要通过已有属性计算得来 原理:底层借助了Objcet.defineProperty方法提供的getter和setter get函数什么时候执行? (1).初次读取时会执行一次 (2).当依赖的数据发生改变时会被再次调用 注: 计算属性最终会出现在vm上,直接读取使用即可 如果计算属性要

随机推荐