14、SQL Server 存储过程

SQL Server 存储过程

存储过程类似函数,可以重复使用。相对于函数,存储过程拥有更强大的功能和更高的灵活性。

存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或多个结果集。

存储过程带来的好处:

1、性能的提升

存储过程执行时,第一次会进行编译和优化。但批处理T-SQL语句每次执行都需要预编译和优化,所以没有存储过程快。

2、易于维护

存储过程创建后存储在数据库中,可以被程序多次调用执行。当需要修改存储过程时,对应用程序代码毫无影响。

3、安全性

应用程序只需要调用存储过程名,给几个参数,而不是直接访问基础对象。需要赋予的不是增删改的权限,而是exec的权限。

系统存储过程

系统存储过程主要存储在master数据库中,以sp_开头,可以在所有数据库对象中使用。

常用的系统存储过程

exec sp_databases    --查看所有数据库
exec sp_tables        --查看所有数据表
exec sp_columns student --查看student表的所有列
exec sp_helpIndex student --查看student表的索引
exec sp_helpconstraint student --查看student表的约束
exec sp_helptext ‘sp_databases‘ --查看定于语句
exec sp_rename oldName,newName --修改表、索引、列的名称
exec sp_renamedb webDB,newDB --修改数据库名称
exec sp_helpdb  webDB --查看数据库信息

用户定义存储过程

语法:

create proc | procedure proc_name
[
    {@parameter1 data_type} [=default] [out | output],
    {@parameter2 data_type} [=default] [out | output]
]
as
[begin]
    T-SQL代码
[end]

不带参数

if(exists(select * from sys.objects where name = ‘proc_test‘))
    drop proc proc_test  --删除
go
create proc proc_test --创建create 修改alter
as
    select * from student order by id desc
--调用
exec proc_test

执行存储过程使用execute关键字,可以简写为exec。在SQL Server 2012中得到加强,可以修改结果集中列名和类型。

execute proc_test
with result sets
(
    (
        序号 varchar(5),
        姓名 varchar(10),
        性别 varchar(2),
        年龄 varchar(5),
        邮箱 varchar(5)
    )
)

输入参数

if(exists(select * from sys.objects where name = ‘proc_test‘))
    drop proc proc_test  --删除
go
create proc proc_test (@id int)
as
    select * from student where id = @id

--调用
exec proc_test 10

默认参数

if(exists(select * from sys.objects where name = ‘proc_test‘))
    drop proc proc_test  --删除
go
create proc proc_test (@id int = 10)
as
    select * from student where id = @id

--调用
exec proc_test      --10
exec proc_test 15 --15

输出参数

if(exists(select * from sys.objects where name = ‘proc_test‘))
    drop proc proc_test  --删除
go
create proc proc_test (
    @id int,        --输入参数
    @name varchar(10) out, --输出参数
    @age int output            --输入输出参数
)
as
begin --可写可不写
    select @name = name,@age = age from student where id = @id
end

--调用
declare @name varchar(10),@age int
exec proc_test 10,@name out,@age output
select @name,@age

不缓存

if(exists(select * from sys.objects where name = ‘proc_test‘))
    drop proc proc_test  --删除
go
create proc proc_test
with  recompile  --不缓存,每次都编译
as
    select * from student order by id desc
--调用
exec proc_test

加密

if(exists(select * from sys.objects where name = ‘proc_test‘))
    drop proc proc_test  --删除
go
create proc proc_test
with encryption  --加密后无法查看
as
    select * from student order by id desc
--调用
exec proc_test
exec sp_helptext proc_test
--提示对象 ‘proc_test‘ 的文本已加密。
时间: 2024-10-15 18:03:34

14、SQL Server 存储过程的相关文章

Sql Server 存储过程中查询数据无法使用 Union(All)

原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正常的SQL语句,使用了Union(All)查询: SELECT ci.CustId --客户编号 , ci.CustNam --客户名称 , ci.ContactBy --联系人 , ci.Conacts --联系电话 , ci.Addr -- 联系地址 , ci.Notes --备注信息 , ai

SQL Server存储过程的使用

存储过程概述 简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理. 基本概念: SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便的从系统表中查询信息, 或者完成与更新数据库表相关的管理任务和其他的系统管理任务.T_SQL语句是SQL Server数据库与应用程序之间的编程接口. 存储过程就是SQL Server为了实现特定任务,而将一些需要多次调用的固定操作语句编写成程序段,这些程序段存储在服务器上, 有数据库服务器通

SQL Server存储过程的初步认知

什么是存储过程? 存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.实际上存储过程就是能完成一定操作的一组SQL语句. 为什么要用存储过程? 1.  存储过程只在创造时候编译,以后每次执行存储过程都不需要再重新的编译,而一般的SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度. 2.  当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事物处理结合在一起. 3.  存储过程可以重复的使用,降低开发人员的工作量,提高工作效率. 4.  安全

SQL Server 存储过程具体解释

SQL Server 存储过程具体解释 存储过程的优缺点 ◆长处: 运行速度更快. 存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快. 存储过程用于处理复杂的操作时,程序的可读性更强.网络的负担更小. 使用存储过程封装事务性能更佳. 能有效的放注入,安全性更好. 可维护性高.在一些业务规则发生变化时.有时仅仅需调整存储过程就可以.而不用修改和重编辑程序. 更好的代码重用. ◆ 缺点: 存储过程将给server带来额外的压力. 存储过程多多时维护比較

Sql server存储过程中常见游标循环用法

原文:Sql server存储过程中常见游标循环用法 用游标,和WHILE可以遍历您的查询中的每一条记录并将要求的字段传给变量进行相应的处理 DECLARE @A1 VARCHAR(10), @A2 VARCHAR(10), @A3 INT DECLARE YOUCURNAME CURSOR FOR SELECT A1,A2,A3 FROM YOUTABLENAME OPEN YOUCURNAME fetch next from youcurname into @a1,@a2,@a3 while

SQL Server 存储过程(转载)

SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储

简单的如何创建sql server存储过程

学习sql server数据库,sql server存储过程的建立方法是一定要知道的,下面将教您如何建立sql server存储过程,希望对您有所帮助. 在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例. 展开“数据库”.sql server存储过程所属的数据库以及“可编程性”. 右键单击“存储过程”,再单击“新建存储过程”. 在“查询”菜单上,单击“指定模板参数的值”. 在“指定模板参数的值”对话框中,“值”列包含参数的建议值.接受这些值或将其替换为新值,再单击“确定”. 在查询编辑

sql server存储过程分页,行变列

CREATE PROCEDURE [dbo].[PROC_GetPriviousAndNextDetailContent]@Index varchar(20),--表主键@Table varchar(100),--从哪个表获取数据@Columns varchar(100),--需要获取哪些字段@OrderStr varchar(100),--排序字段及方式@Where1    varchar(100),--row_number中的初步过滤条件@Where2 varchar(100)--当前要查询

sql server 存储过程 拼接SQL 超过8000

问题描述: 公司需要做一个报表,根据人员组织树,点击某一节点的时候,显示下一个直接子节点的表单申请情况,根据表单状态进行分组. 实现思路: 一开始是想通过拼接SELECT SQL,将所有子节点的报表情况union,然后所谓存储过程的结果返回.调试过程中发现,拼接出来的SQL太长,在拼接过程中自动被截断了. 解决思路: 分别执行原本打算拼接的SELECT 语句,将每个结果一次插入一个临时表,最后将所有临时表的数据作为存储过程的结果返回. sql server 存储过程 拼接SQL 超过8000