SQL Server存储过程入门学习

存储过程的定义,

存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行。
在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server。
用户自定义存储过程是由用户创建,并能完成某一特定功能,如:查询用户所需数据信息的存储过程。

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

(1)重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。
(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
(4)安全性。参数化的存储过程可以防止SQL注入式的攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

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

定义存储过程的语法

CREATEPROC[EDURE]存储过程名
@参数1数据类型=默认值,
…… ,
@参数n数据类型OUTPUT
AS
SQL语句
GO
参数是可选的
参数分为输入参数、输出参数
输入参数允许有默认值
这里来创建一个简单的存储过程

CREATE PROCEDURE UserLogin@name varchar(20),@password varchar(20)
AS
-- 定义一个临时用来保存密码的变量--DECLARE @strPwd NVARCHAR(20) 这里先不介绍变量。稍后的文章会详细讲到BEGINselect * from userinfo where userName=@name and userPass=@passwordENDGO
首先我们用简单的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....

上面我们也看到了。

创建这样的存储过程有什么用呢,不是只能在数据中查看赛。
我们在做web或者winform 程序,假设需要个登录,好,我们可以调用用这个存储过程来登录,根据传入的参数,如果查询出来有记录,那么这条记录在数据库中存在,表示登录成功,否则失败。
这样做的目的更加安全,可以防止sql注入。

(0)

相关推荐

  • SQL Server存储过程的基础说明

    可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程). 也可以创建在Microsoft SQL Server启动时自动运行的存储过程. 语法 CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRY

  • 基于Sql Server通用分页存储过程的解决方法

    sql server2000分页方式很多,效率吗  当到达10万级以上就有些吃力了,这里暂时不例出来了 sql server2005以上就有了row_number 也是一大进步,详情如下参考 复制代码 代码如下: Sql Server2005通用分页存储过程 CREATE PROCEDURE [dbo].[Common_GetPagedList](@TableName nvarchar(100), --表名@ColumnNames nvarchar(1000) = '*', --字段名集合(全部

  • SQL Server 分页查询存储过程代码

    复制代码 代码如下: CREATE PROCEDURE [dbo].[up_Pager] @table varchar(2000), --表名 @col varchar(50), --按该列来进行分页 @orderby bit, --排序,0-顺序,1-倒序 @collist varchar(800),--要查询出的字段列表,*表示全部字段 @pagesize int, --每页记录数 @page int, --指定页 @condition varchar(800) --查询条件 AS DECL

  • SQL Server常用存储过程及示例

    分页: 复制代码 代码如下: /*分页查找数据*/ CREATE PROCEDURE [dbo].[GetRecordSet] @strSql varchar(8000),--查询sql,如select * from [user] @PageIndex int,--查询当页号 @PageSize int--每页显示记录 AS set nocount on declare @p1 int declare @currentPage int set @currentPage = 0 declare @

  • SQL Server 存储过程解析

    存储过程功能的优点 为什么要使用存储过程?以下是存储过程技术的几大主要优点: 预编译执行程序.SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划.这个特点通过重复调用存储程序极大地提高了程序的性能. 缩短客户端/服务器之间的信息传输量.如果你的工作环境带宽有限,那么存储过程技术肯定能够满足你,因为它能够把需要传输的长的SQL查询缩短成一行. 有效重复使用代码和编程.存储过程可以为多个用户所使用,也可以用于多个客户程序.这样可以减少程序开发周期的时间. 增强安全性控

  • 深入sql server 2005 万能分页存储过程的详解

    –建立主表临时表CREATE TABLE #temp(rownumber bigint,orderseqno VARCHAR(36),goodsname VARCHAR(50),companyname VARCHAR(100))–建立子表临 时表CREATE TABLE #detail(orderseqno VARCHAR(36),detailid UNIQUEIDENTIFIER,unitprice DECIMAL(12,2),Qty int)–插入主表数据到主表临时表insert into

  • SQL Server存储过程入门学习

    存储过程的定义, 存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行.在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程.系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server.用户自定义存储过程是由用户创建,并能完成某一特定功能,如:查询用户

  • SQL Server数据库入门学习总结

    一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识. 数据库基本是由表,关系,操作组成:对于初学者首先要学的: 1.数据库是如何存储数据的 表,约束,触发器 2.数据库是如何操作数据的 insert,update,delete T-sql 函数 存储过程 触发器 3.数据库是如何显示数据的 select SQLServer数据库学习总结 1.SQL基础 SQL Server2000安装.配置,服务器启动.停止,企业管理器.查询分

  • SQL SERVER存储过程用法详解

    目录 一.存储过程的概念 存储过程的优点 二.存储过程的分类 1.系统存储过程 2.临时存储过程 3.用户自定义存储过程 二.存储过程的用法 1.不带参数的存储过程,获取MyStudentInfo表的所有记录 2.创建带输入参数的存储过程 3.创建带默认值的输入参数的存储过程 4.创建带输出参数的存储过程(根据输入的ID返回年级ID) 5.创建带返回值的存储过程 6.创建带变量的存储过程 7.创建带输入输出参数的存储过程 8.创建分页存储过程 分页存储过程2 9.返回多个结果集 10.存储过程中

  • Sql Server存储过程详解

    从存储过程返回数据 - SQL Server | Microsoft 官方文档 存储过程它是真正的脚本,更准确地说,它是批处理(batch),但都不是很确切,它存储与数据库而不是单独的文件中. 存储过程中有输入参数,输出参数以及返回值等. 一.创建存储过程:CREATE PROC 创建存储过程的方法除了他使用AS关键字外,和创建数据库中任何其他对象一样.存储过程的基本语法如下: 在语法中,PROC是PROCEDURE的缩写,两个选项的意思一样.在对存储过程命名完之后,接着是参数列表.参数是可选

  • SQL Server存储过程中使用表值作为输入参数示例

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样可以省去很多自定义的代码.这样的操作对于存储过程内基于表函数的操作变得非常容易操作. 表值参数是使用用户定义的表类型来声明的.所以使用之前要先定义表类型. /* 创建表类型.*/ CREATE

  • Sql Server 存储过程调用存储过程接收输出参数返回值

    创建存储过程: ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,[Country] ,[Phone] ,[Fax] FROM [Northwind].[dbo].[Customers] SET @row

  • SQL Server 存储过程遇到“表 ''#TT'' 没有标识属性无法执行 SET 操作”错误

    创建临时表,往临时表插入数据的时候报的错误. 一开始提示没有打开主键,后来打开主键就提示上述错误异常. 从网上查找资料没有找到,然后又到群里问各位大牛,一位大牛告诉我是没有设置主键. 我又仔细看看提示,恍然大悟,我就给临时设置了主键. 没有主键之前的代码: CREATE TABLE #TT( CourseId INT , UserId INT, ClassId INT ) INSERT INTO #TT ( CourseId, UserId, ClassId ) SELECT CourseId,

  • SQL Server存储过程中编写事务处理的方法小结

    本文实例讲述了SQL Server存储过程中编写事务处理的方法.分享给大家供大家参考,具体如下: SQL Server中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码.希望能够对您有所帮助. 在编写SQL Server 事务相关的存储过程代码时,经常看到下面这样的写法: begin tran update statement 1 ... update statement 2 ...

  • SQL Server存储过程在C#中调用的简单实现方法

    0. 简介 [定义]:存储过程(Stored Procedure) 是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. [优缺点]:存储过程优缺点都非常的明显!几乎每一篇讨论存储过程的文字,都是会说其他优点是balabala,缺点是balabala,然而最后作者的结论都是:"我不推荐使用存储过程". 具体的存储过程的优缺点这里就不详述了! 公司旧项目使用存储过程实现业

  • 使用SQL SERVER存储过程实现历史数据迁移方式

    目录 1.什么是历史数据迁移? 2.历史数据迁移的目的 3.什么时候需要做历史数据迁移? 4.数据迁移的基本思路 6.使用场景特别说明 今天讲下软件开发中最常见的历史数据迁移方式.在讲迁移之前,先简单介绍下几个基本概念. 1.什么是历史数据迁移? 简单直白地说:就是将一些创建时间比较久而且不常用的历史数据,存储到另一个地方(可以是另一个数据,也可以是另一个表),一般历史数据迁移的数据,都是不会更改了的数据,后续只可能需要查询统计而已. 2.历史数据迁移的目的 减少在用数据库的数量,因为数据量越大

随机推荐