码迷,mamicode.com
首页 > 数据库 > 详细

40. SQL -- 存储过程(1)

时间:2015-04-05 06:47:48      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:procedure   服务器   应用程序   c语言   数据库   

储过

 

储过程的定

储过程(StoredProcedure)是一组为了完成特定功能的SQL 句集,是利用SQLServer 所提供的Transact-SQL言所写的程序。功能是将常用或复杂的工作,先用SQL句写好并用一个指定名称存起来,以后需要数据提供与已定好的存储过程的功能相同的服务时,只需execute,即可自完成命令。存储过程是由流控制和SQL 写的程,经编译化后存在数据器中,可由用程序通一个用来行,而且允声明量 。同,存储过程可以接收和出参数、返回行存储过程的状态值,也可以嵌套用。

q 储过程(procedure似于C言中的函数

q 用来行管理任复杂业务规则

q 储过程可以参数,也可以返回

q 储过程可以包含数据操纵语句、量、逻辑 控制句等

储过程是一系列编辑好的、能实现特定数据操作功能的SQL,它与特定的数据关联,存SQL Server器上。用可以像使用函数一复调些存储过程,实现它所定的操作。

建存储过点:

a) 储过程只在时进编译,以后行存储过程都不需再重新编译,而一般SQL 每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

b) 数据库进复杂操作(多个表Update,Insert,Query,Delete

),可将此复杂操作用存储过程封装起来与数据提供的事务处合一起使用。

c) 储过程可以重使用,可减少数据库开发的工作量

d) 安全性高,定只有某些用才具有指定存储过程的使用

创建存储过程的缺点:

2 调试,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。

2 移植问题,数据端代当然是与数据的。但是如果是做工程型目,基本不存在移植问题

2 重新编译问题,因后端代是运行前编译的,如果有引用系的生改变时,受影响的存储过程、包将需要重新编译(不也可以置成运行刻自动编译)。

2 如果在一个程序系中大量的使用存储过程,到程序交付使用的候随着用需求的增加会致数据构的化,接着就是系的相关问题了,最后如果用维护该可以是很、而且代价是空前的,维护起来更麻

储过程的种类

1 、系储过

sp_开头,用来行系的各项设.取得信息.管理工作。

2 、本地存储过

户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事上一般所的存储过程就是指本地存储过程。

3 临时储过

储过程:

一是本地临时储过程,以井字号(#)其名称的第一个字符则该储过程将成一个存放在tempdb 数据中的本地临时储过程,且只有建它的用才能行它;

二是全局临时储过程,以两个井字号(##)则该储过程将成一个存tempdb数据中的全局临时储过程,全局临时储过程一旦建,以后接到服器的任意用都可以行它,而且不需要特定的限。

4 程存储过

SQLServer2005 中,程存储过(Remote Stored Procedures)是位于程服器上的存储过程,通常可以使用分布式查询EXECUTE 命令行一个程存储过程。

5 展存储过

展存储过(ExtendedStored Procedures)是用可以使用外部程序写的存储过程,而且展存储过程的名称通常以xp_开头

 

如何使用展存储过

展存储过程注册到SQL Server中之后,展存储过程就可以像普通存储过程一被使用。

例如,xp_cmdshell是一个很有用的内置展存储过程,它以操作系命令行解器的方式定的命令字符串,并以文本行方式返回果。

如:句:

EXECxp_cmdshell dir ‘

DOS命令dirDOS命令DIR示的是SQL Server 所在的服器当前目下的内容。

但如果是在网中的其他算机上通接来访问SQL Server行上面的命令并不能示本地的目内容。

展存储过

如果SQL Server中的展存储过程不再需要,可以使用T-SQL句或SQL

ServerManagement Studio将其除。

1 . 使用T-SQL展存储过

使用T-SQL展存储过程的法如下:

sp_dropextendedproc[@function_name=] procedure‘

在上面的法中,[@function_name=] procedure‘是要除的展存储过程名称。

DEMO行存储过sp_dropextendedproc,将展存储过xp_hellomaste除。

USEmaster

EXECsp_dropextendedproc ‘xp_hello‘

2 、使用SQL ServerManagement Studio展存储过

SQL Server Management Studio中,展存储过程的步骤如下:

(1),然后展器。

(2)数据库‖文件,展master数据,然后单击展存储过文件

(3)详细信息窗格中右除的展存储过程,然后单击命令。

(4)除此展存储过数据的影响,单击示相命令。

(5)单击全部除去

 

储过程:

储过程是指安装SQL Server由系统创建的存储过程,C言中的系函数。其大多是一些常用的系操作。系储过程存master数据中,其前缀为sp_

常用系储过程:

储过

sp_databases 列出服器上的所有数据

sp_helpdb 告有指定数据或所有数据的信息

sp_renamedb 更改数据的名称

sp_tables 返回当前境下可查询象的列表

sp_columns 回某个表列的信息

sp_help 看某个表的所有信息

sp_helpconstraint 看某个表的

sp_helpindex 看某个表的索引

sp_stored_procedures列出当前境中的所有存储过程。

sp_password 添加或修改登录帐户的密

sp_helptext 示默认值、未加密的存储过程、用的存储过程、触器或视图

实际文本。

DEMO

exec sp_databases 列出服器上的所有数据

返回:

exec sp_helpdb demo_db 告有指定数据或所有数据的信息

主要返回数据容量、有者、建日期、文件等信息

返回:

use demo_db

go

exec sp_tables 返回当前境下可查询象的列表

返回:

exec sp_columns timerecords 回某个表列的信息

返回:

exec sp_help timerecords 示某个表的帮助信息

包含表名称、架构、型、建日期、列名、列数值类型、索引、束等信息

返回:

sp_helpconstraint timerecords 看表的束信息

返回:

sp_helpindex timerecords 看表的索引信息

返回:

use master

go

sp_stored_procedures 列出当前境中所有的存储过

返回:

sp_helptext ‘sp_help‘ 示某象的建文件于加密的象无效

返回:

 

展存储过

展存储过程使你得以使用建自己的外部例程。展存储过程与通常的存储过程其有很大差

展存储过程是以C言等写的外部程序,以动态链Dll)形式存在服器上,SQL Server可以动态行它写好展存储过程后,固定服器角色(sysadamin)即可在Sql Server器上注册该扩展存储过程,并将它限授其他用展存储过程只能添加到Master数据

DEMO:

use master

go

if exists ( select *from sysdatabases where name = ‘JWGL‘)

drop database JWGL

go

exec xp_cmdshellmkdir d:\sqldata‘,no_output

create database JWGL

on primary

(

name=‘JWGL_data‘,

size=5,

maxsize=100,

filegrowth=15%,

filename=‘d:\sqlData\JWGL_data.mdf‘

)

log on

(

name=‘JWGL_log‘,

size=5,

maxsize=100,

filegrowth=5,

filename=‘d:\sqlData\JWGL_log.ldf‘

)

go

exec xp_cmdshell ‘dird:\sqldata‘

 

自定储过

由用户为完成某一特定功能而写的存储过程。包含了完成功能所行的T-SQL句及所使用的量等。

SQL Server 2008 T-SQLCLRXP 的比

T-SQL Transact Structured Query Language SQLSERVER 构化查询语言增

CLR Common LanguageRuntime 公共言运行

XP ExtendedStored Procedure SQL Server 展存储过

三者的比分析

1 CLRT-SQL 程模型

a) T-SQL 是将一些合成了一些程代,也可以是在程代内部嵌入了查询语言,程代包括一些流程控制的句,通过这句跟我们查询SQL 句共同的完成了我们这种业务逻辑的定

b) CLR 的方式,它有自身的特点,有好的也有坏的,首先于数据访问,它不是直接行一个SQL 句,CLR需要通ADO.NETSystem.Data.Sqlserver这样一个中介来完成查询,当然查询的参数也是一个SQL 句,但具体行的程需要通ADO.NET 中介来实现,由于它包括了一间层的代,所以它数据访问的效率赶不上T-SQL;另外CLR 它会生一个比的代,比我T-SQL写的代方式要冗,因T-SQL 它是解释执行的,而CLR需要经过一个编译程;CLR 点是容易在各,比如将中间层业务逻辑的程

序集要移到数据库层时,直接将程序集布署到相的数据即可。

2 CLRT-SQL 性能分析

a) T-SQL 在数据访问方面性能好,适合写数据访问密集的代

b) CLR数据访问性能次之,但点是可以实现大量的复杂逻辑过程代或者是复杂算。比如BI 方面的用,如果我用存储过程那非常复杂且代,如果用CLR 的方式呢,用托管方式就比较简单经济,因托管的代用的是.net 类库.net 类库自身又提供了很多可用的类库,它非常适用于理一些大量的算及逻辑过程。

3 CLRT-SQL 句的提交、返回分析

a) 程代SQL 句返回,T-SQL 具有优势SQL 查询语句后很容易将果返回端。

b) CLR有一个外的代码层,会造成数据访问的性能降低,它可以通.net 类库提供的SqlPiple 这样一个象将送到客端。

4 CLRT-SQL

a) T-SQL 是通、只标实现数据记录航,可更新光当前位置行,适合于行一系列(insert\update\delete\select),有几个或不返回到客端的行,并且不生的行。

b) CLR是通ADO.NET 里面提供的一个SqlDataReader 实现,不能更新当前所在的位置行,它适合行都有复杂理。

5 CLR展存储过(XP)

a) 展存储过限的粒度不及CLR

b) 版本的 MicrosoftSQL Server 功能。

 


本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1629006

40. SQL -- 存储过程(1)

标签:procedure   服务器   应用程序   c语言   数据库   

原文地址:http://57388.blog.51cto.com/47388/1629006

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!