本文内容来自百度百科:http://baike.baidu.com/view/1031973.htm

CREATE PROCEDURE 创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft SQL Server启动时自动运行的存储过程。

语法  

CREATE PROC [ EDURE ] procedure_name [ ; number ]

  [ { @parameter data_type }

  [ VARYING ] [ = default ] [ OUTPUT ]

  ] [ ,...n ]

  [ WITH

  { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

  [ FOR REPLICATION ]

  AS sql_statement [ ...n ]

参数

procedure_name

  新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。有关更多信息,请参见使用标识符。

  要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。

number

  是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。

@parameter

  过程中的参数。在 CREATE PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。

  使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。有关更多信息,请参见 EXECUTE。

data_type

  参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。有关 SQL Server 提供的数据类型及其语法的更多信息,请参见数据类型。

  说明 对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。

VARYING

  指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。

default

  参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。

OUTPUT

  表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。

n

  表示最多可以指定 2.100 个参数的占位符。

  {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

  RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。

  ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。

  说明 在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。

FOR REPLICATION

  指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。

AS

  指定过程要执行的操作。

sql_statement

  过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。

  n

  是表示此过程可以包含多条 Transact-SQL 语句的占位符。

注释  

存储过程的最大大小为 128 MB。

  用户定义的存储过程只能在当前数据库中创建(临时过程除外,临时过程总是在 tempdb 中创建)。在单个批处理中,CREATE PROCEDURE 语句不能与其它 Transact-SQL 语句组合使用。

  默认情况下,参数可为空。为了防止向不允许使用 NULL 的列传递 NULL 参数值,应向过程中添加编程逻辑或为该列使用默认值(使用 CREATE 或 ALTER TABLE 的 DEFAULT 关键字)。

  说明 SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由兼容级别设置控制。如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。有关更多信息,请参见 sp_dbcmptlevel。

  获得有关存储过程的信息

  若要显示用来创建过程的文本,请在过程所在的数据库中执行 sp_helptext,并使用过程名作为参数。

  说明 使用 ENCRYPTION 选项创建的存储过程不能使用 sp_helptext 查看。

  若要显示有关过程引用的对象的报表,请使用 sp_depends。

  若要为过程重命名,请使用 sp_rename。

引用对象  

SQL Server 允许创建的存储过程引用尚不存在的对象。在创建时,只进行语法检查。执行时,如果高速缓存中尚无有效的计划,则编译存储过程以生成执行计划。只有在编译过程中才解析存储过程中引用的所有对象。因此,如果语法正确的存储过程引用了不存在的对象,则仍可以成功创建,但在运行时将失败,因为所引用的对象不存在。

执行存储过程  

成功执行 CREATE PROCEDURE 语句后,过程名称将存储在 sysobjects 系统表中,而 CREATE PROCEDURE 语句的文本将存储在 syscomments 中。第一次执行时,将编译该过程以确定检索数据的最佳访问计划。

  使用 cursor 数据类型的参数

  存储过程只能将 cursor 数据类型用于 OUTPUT 参数。如果为某个参数指定了 cursor 数据类型,也必须指定 VARYING 和 OUTPUT 参数。如果为某个参数指定了 VARYING 关键字,则数据类型必须是 cursor,并且必须指定 OUTPUT 关键字。

转载于:https://www.cnblogs.com/beijia/archive/2011/08/02/procedure.html

SQL Server procedure相关推荐

  1. SQL Server中 缓冲和池的不同点

    在SQL Server中存储方式主要分为2大类 缓冲和池.都是用来临时存放数据的,到底有什么不同.一直很恼人. 有幸看到一位大牛的博客,截取了其中讲述cache 和 pool的不同点. Before ...

  2. SQL Server 数据库的维护(一)__存储过程(procedure)

    --维护数据库-- --存储过程(procedure)-- --概述: SQl Serve的存储过程是由一个或多个T-SQL语句组成的一个集合.常用的程序代码段通常被创建成存储过程,一次创建多次调用, ...

  3. 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集

    如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括: 如 ...

  4. SQL Server问题之The remote procedure call failed. [0x800706be]

    在SQL Server Services下出现错误The remote procedure call failed. [0x800706be],发现SQL Server (MSSQLSERVER) 服 ...

  5. SQL Server调用Database Mail发送邮件报错:Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1 EXECUTE

     新的账号有使用表Tigger调用Database Mail发送邮件时报错:Msg 229, Level 14, State 5, Procedure sp_send_dbmail, Line 1 ...

  6. SQL Server存储过程输入参数使用表值

    在2008之前如果我们想要将表作为输入参数传递给SQL Server存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入. 在2008中提供了表值参数.使用表值参数,可以不 ...

  7. 如何 SQL Server 2005 实例之间传输登录和密码

    INTRODUCTION 本文介绍如何不同服务器上的 Microsoft SQL Server 2005 实例之间传输登录和密码. 本文, 服务器 A 和服务器 B 是不同的服务器. 此外, 服务器 ...

  8. SQL Server 最佳实践分析器使用小结

    Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你 ...

  9. SQL Server Alwayson 主从数据库账号同步

    我们建立了Alwayson后,辅助副本下的数据库是没有相应的账号的,怎么样进行账号的同步呢?怎么在不知道密码的情况下,进行账号的同步设置. 我们可以通过SP--sp_help_revlogin 来实现 ...

最新文章

  1. 华人学者往Linux内核里提交bug,社区把整个明尼苏达大学拉黑了
  2. matlab面向对象排序,matlab面向对象编程基础
  3. springboot启动时An attempt was made to call a method that does not exist
  4. js(Dom+Bom)第五天(1)
  5. 解密昇腾AI处理器--Ascend310简介
  6. 递推与储存,是动态规划的关键
  7. 计算机网络协议和通信规则,计算机网络协议基本知识
  8. servlet加载资源两种方式-内外(初始化参数).properties文件
  9. 场效应管原理_场效应管——不就是一个电控开关?
  10. Kinect开发学习笔记之(二)Kinect开发学习资源整理
  11. 图像 存储csv_matplotlib基于数据文件绘制其图像
  12. Spring Boot 如何获取 Controller 方法名和注解信息?
  13. 循环控制-链表删除结点
  14. java二维数组详解
  15. EditPlus中配置JSON格式化功能
  16. 毫米波雷达基本原理,多普勒效应技术,你知道多少?
  17. golang读取conf文件的两种方式(ini和Viper)
  18. Problem E: 农夫果园
  19. Microsoft Bitlocker企业级管理部署方案
  20. python到底要学多久才能找到工作?

热门文章

  1. .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现...
  2. shell脚本学习之参数传递
  3. 一分钟让你快速了解红外气体传感器作用,特性及应用
  4. AngularJS内置指令
  5. nginx 400状态码排查
  6. 一个理想主义者关于爱情和美女、事业与金钱的疯人痴语
  7. MSSQL2005 手工盲注详解
  8. Java并发编程实战系列10之避免活跃性危险
  9. [转载]C# ListT的并集、交集、差集
  10. linux 进程等待 wait 、 waitpid