sql server 存储过程

摘要:
]][withRecocompile | encryption |[executeas[caller|self|owner|]][用于复制]作为|externalname。.使用ALTER PROC和CREATE PROC语句之间的唯一区别包括以下几点:ALTER PROC希望查找现有的存储过程,但CREATE不保留ALTER PROC在存储过程上建立的任何权限。它在系统对象中保留相同的对象ID,并允许保留依赖项。以下几次运行存储过程将使用缓存查询计划存储过程的缺点,除非使用withrecompile选项指定:当执行动态查询时,它可能使用错误的计划。它不能在平台之间迁移。嵌套的扩展存储过程只能有32层。

基本语法:

Create proc <sproc name>

[<parameter name> [schema.]<data type>[varying][=<default value>][out [put]][readonly]

[,<parameter name>[schema.]<data type>[varying][=<default value>][out[put]]

[readonly]

[,…]]

[with

Recompile|encryption|[execute as [caller|self|owner|<’user name’>]]

[for replication]

As

<code>|external name<assembly name>.<assembly class>.<method>

使用ALTER PROC 和CREATE PROC 语句的唯一区别包括以下几点:

ALTER PROC 期望找到一个已有的存储过程,而create不是

ALTER PROC 保留了存储过程上已经建立的任何权限,他在系统对象中保留了相同的对象ID,并允许保留

依赖关系。

ALTER PROC 在可能调用被修改的存储过程的其他对象上保留了任何依赖信息

删除存储过程:drop proc <sproc name>[;]

参数化:

声明参数时需要两到四部分的信息:名称,数据类型,默认值,方向

Create proc spemployeebyname

@lastname nvarchar(50)

As

……

Create proc spemployeebyname

@lastname nvarchar(50)=null

As

….

Create proc usplogerror

@errorlogid int=0 output

As

Exec usplogerror @errorlogid=@myoutputparameter output

注意:

对于存储过程声明中的输出参数,需要使用output关键字

和声明存储过程时一样,调用存储过程时必须使用output关键字

Exec关键字是必须的

通过返回值确认成功或失败:

不管是否提供返回值,程序都会收到一个返回值,默认为0

错误处理:

3种常见错误:运行时错误,内联错误,更具逻辑性但不太引起注意的错误

以前的方式:

处理内联错误

利用@@error(包含了最后执行的t-sql语句的错误号,如果为0,则没有发生错误)

用try catch处理

在错误发生之前处理错误

手动引发错误:

Raiserror(<message id|message string|variable>,<severity>,<state>

[,<argument>

[,<…n>]])

[with option[,…n]]

Raiserror(‘hi there, I’’m an error’,1,1);

消息 50000,级别1,状态1

严重性:1-10,11-16,17,18-19,20-25

状态:1-127

错误参数:所有的占位符都以%符号开始,然后是传递的信息类型的编码

D:有符号的整数

O:无符号的八进制数

P:指针

S:字符串

U:无符号的整数

X:无符号的十六进制数

还可以设置宽度,精度,长短

Raiserror(‘this is a sample parameterized %s,along with a zero padding and a sign%+010d’,1,1,’string’,12121)

this is a sample parameterized string,along with a zero padding and a sign+000012121

消息50000,级别1,状态1

With <option> 引发的错误还可以混搭3个选项

Log

Seterror

Nowait

添加自定义的错误消息:

Sp_addmessage [@msgnum=]<msg id>,

[@severity=]<severity>

[@msgtext=]<’msg’>

[,[@lang=]<’language’>]

[,[@with_log=][true|false]]

[,[@replace=]’replace’]

当运行sp_addmessage时,无论使用何种数据库,实际消息都在master数据库,可用sys.messages系统视图查看

删除已有的自定义消息:sp_dropmessage <message number>

存储过程的优点:

使得需要过程式动作的进程可调用

安全性,安全隔离层

性能

可重用的代码

对代码进行区域化

根据在运行时建立的动态过程灵活执行

在创建了存储过程后,将在第一次执行的时候优化,查询计划被编译并且缓存到系统上。后续几次运行该存储过程,

除非使用with recompile选项指定,否则都会使用缓存的查询计划

存储过程的不利方面:

Exec动态查询时,可能会使用错误的计划

不能在平台间移植

扩展存储过程(XP)

嵌套只能有32层

。NET程序集可以和系统关联起来,并用来实现真正复杂的操作,例如可以在自定义函数中使用,从外部数据源提供数据

向数据库中添加一个程序集:

Create assembly <assembly name> authorization <owner name> from <path to assembly>

With permission_set=[safe|external_access|unsafe]

免责声明:文章转载自《sql server 存储过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇打造“黑客“手机--Kali NethunterC# JObject解析Json(多方法解析Json 二)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle面试题(基础篇)

1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-...

MySQL4:存储过程和函数

什么是存储过程 简单说,存储过程就是一条或多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理。本文主要讲解如何创建存储过程和存储函数以及变量的使用,如何调用、查看、修改、删除存储过程和存储函数等。使用的数据库和表还是之前写JDBC用的数据库和表: create databaseschool; useschool; create tablest...

Dapper-小型ORM之王(C#.NET)

ORM:对象关系映射器,它直接将数据库映射到C#对象。 有很多ORM框架可用,Dapper是其中之一,被称为ORM之王。 下面是Dapper主要的一些功能: 速度快,性能好; 更少的代码行 对象映射 静态对象绑定 动态对象绑定 易于处理Sql语句 易于处理存储过程 直接操作IDBConnection类,该类直接向数据库提供平滑性和运行查询,而不是像在EF...

Winform通用模块之流水号生成

  打算接下来的时间里把自己觉得用起来还比较好用的通用模块,在这里向大家介绍一下,如果你有更好的想法时,也希望你不吝指点。 1、数据库表及存储过程     在介绍这个通用流水号生成的模块前,我们先来看一下其相关的表结构:   从上图中我们可以看到,该模块用到的数据表有两个,其实用一个表也可以实现这个功能,我想很多人用到的也只是一个表,但我为什么要分为两个...

SQLSERVER海量数据库的查询优化及分页算法数据库专栏,SQL Server (转)

探讨怎么在有着1000万条数据的ms sql server数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构:create table [dbo].[tgongwen] (    --tgongwen是红头文件表名   [gid] [int] identity (1, 1) not null ,--本表的i...

sql server维护解决方案(备份、检查完整性、索引碎片整理)

请务必看原文原文:https://ola.hallengren.com/frequently-asked-questions.html经常问的问题入门 如何开始使用SQL Server维护解决方案? SQL Server维护解决方案入门很容易。跟着这些步骤。 下载MaintenanceSolution.sql。 在脚本中,找到以下行:SET @Ba...