zoukankan      html  css  js  c++  java
  • sql server 存储过程

    基本语法:

    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]

  • 相关阅读:
    AVL树入门
    hdu 3709 Balanced Number
    跟着病毒学技术--学习WannaCry自己实现LoadLirbrary
    Win7下64位扫雷逆向以及辅助制作
    Qt使用.lib静态库和.dll动态库文件
    X64调用规范
    “热补丁”Hook,多线程下InlineHook解决方法
    x86 x64下调用约定浅析
    配置Sublime Text3编译汇编并高亮代码
    反调试技术(一)--静态反调试
  • 原文地址:https://www.cnblogs.com/ongoing/p/2944140.html
Copyright © 2011-2022 走看看