zoukankan      html  css  js  c++  java
  • sql2005创建存储过程(需要注意的几点)

     

    注意:
    在传递存储过程或用户定义函数中的参数时,或在声明和设置批语句中的变量时,ANSI_WARNINGS 的优先级较低。例如,如果一个变量被定义为 char(3),但后来将该参数设置为一个大于三个字符的值,则数据将被截断为定义的大小,并且 INSERT 或 UPDATE 语句将执行成功。


    使用 CLR 存储过程的参数
    CLR 存储过程的参数可以是标量 SQL Server 系统数据类型的任何一种。

    为了使数据库引擎 在 .NET framework 中被重载时引用正确的方法, 中指示的方法必须具有下列特征:

    声明为静态方法。


    接收的参数个数与过程的参数个数相同。


    不能是类的构造函数或析构函数。


    使用的参数类型与 SQL Server 过程的相应参数的数据类型兼容。有关将 SQL Server 数据类型与 .NET framework 数据类型匹配的信息,请参阅 SQL Server Data Types and Their .NET framework Equivalents。


    返回 void,或者返回类型为 SQLInt32、SQLInt16、System.Int32 或 System.Int16 的值。


    如果对于任何特定的参数声明都指定了 OUTPUT,则按照引用返回它的参数,而不是按照值返回。


    获得有关存储过程的信息
    若要显示 Transact-SQL 存储过程的定义,请使用该过程所在的数据库中的 sys.sql_modules 目录视图。

    例如:

    复制代码
    USE AdventureWorks;
    GO
    SELECT definition
    FROM sys.sql_modules
    JOIN sys.objects ON sys.sql_modules.object_id = sys.objects.object_id AND TYPE = ''P'';

    注意:
    不能使用 sys.sql_modules 目录视图查看使用 ENCRYPTION 选项创建的存储过程的文本。


    若要获取有关某过程引用的对象的报表,请查询 sys.sql_dependencies 目录视图或使用 sp_depends。sp_depends 不返回有关 CLR 存储过程引用的对象的信息。若要显示有关 CLR 存储过程的信息,请使用该过程所在的数据库中的 sys.assembly_modules 目录视图。

    若要显示有关存储过程中定义的参数的信息,请使用该过程所在的数据库中的 sys.parameters 目录视图。

    延迟名称解析
    可以创建引用尚不存在的表的存储过程。在创建时,只进行语法检查。直到第一次执行该存储过程时才对其进行编译。只有在编译过程中才解析存储过程中引用的所有对象。因此,如果语法正确的存储过程引用了不存在的表,则仍可以成功创建;但如果引用的表不存在,则存储过程将在运行时失败。有关详细信息,请参阅延迟名称解析和编译。

    执行存储过程
    当执行用户定义的存储过程时,无论是在批中还是在模块(例如用户定义的存储过程或函数)内,极力建议使用架构名称来限定存储过程名。

    如果存储过程编写为可以接受参数值,则可以提供参数值。该值必须是常量或变量。不能指定函数名作为参数值。变量可以是用户定义变量或系统变量,例如 @@SPID。

    有关详细信息,请参阅执行存储过程(数据库引擎)。

    第一次执行某个过程时,将编译该过程以确定检索数据的最优访问计划。如果已经生成的计划仍保留在数据库引擎 计划缓存中,则存储过程随后执行的操作可能重新使用该计划。有关详细信息,请参阅执行计划的缓存和重新使用。

    使用 cursor 数据类型的参数
    Transact-SQL 存储过程只能将 cursor 数据类型用于 OUTPUT 参数。如果为某个参数指定了 cursor 数据类型,则还需要 VARYING 和 OUTPUT 参数。如果为某个参数指定了 VARYING 关键字,则数据类型必须是 cursor,并且必须指定 OUTPUT 关键字。有关详细信息,请参阅在 OUTPUT 参数中使用 cursor 数据类型。

    临时存储过程
    数据库引擎 支持两种临时过程:局部临时过程和全局临时过程。局部临时过程只对创建该过程的连接可见。全局临时过程则可由所有连接使用。局部临时过程在当前会话结束时将被自动删除。全局临时过程在使用该过程的最后一个会话结束时被删除。有关详细信息,请参阅创建存储过程(数据库引擎)。

    自动执行存储过程
    SQL Server 启动时可以自动执行一个或多个存储过程。这些存储过程必须由系统管理员在 master 数据库中创建,并以 sysadmin 固定服务器角色作为后台进程执行。这些过程不能有任何输入或输出参数。有关详细信息,请参阅自动执行存储过程。

    存储过程嵌套
    存储过程可以被嵌套。这表示一个存储过程可以调用另一个存储过程。在被调用过程开始运行时,嵌套级将增加,在被调用过程运行结束后,嵌套级将减少。存储过程最多可以嵌套 32 级。有关详细信息,请参阅嵌套存储过程。

    若要估计编译后的存储过程大小,请使用下列性能监视器计数器。

    性能监视器对象名 性能监视器计数器名称
    SQLServer: Plan Cache object
    Cache Hit Ratio


    Cache Pages


    Cache object Counts*

    * 各种类别的缓存对象均可以使用这些计数器,包括即席 sql、准备好的 sql、过程、触发器等。

    有关详细信息,请参阅 SQL Server Plan Cache 对象。

    限制
    可以在存储过程中指定除了 SET SHOWPLAN_TEXT 和 SET SHOWPLAN_ALL 以外的任何 SET 语句。这些语句在批处理中必须唯一。选择的 SET 选项在存储过程执行过程中有效,之后恢复为原来的设置。

    如果用户不是存储过程所有者,则在使用存储过程时,必须使用对象架构名称对存储过程内所有数据定义语言 (DDL) 语句(例如 CREATE、ALTER 或 DROP 语句、DBCC 语句、EXECUTE 和动态 SQL 语句)中使用的对象名称进行限定。有关详细信息,请参阅设计存储过程(数据库引擎)。

    参数
    schema_name
    过程所属架构的名称。

    procedure_name
    新存储过程的名称。过程名称必须遵循有关标识符的规则,并且在架构中必须唯一。

  • 相关阅读:
    习题1
    实验3阅读下面程序、分析说明运行结果,并上机验证。
    实验2利用循环计算n个圆柱体体积。
    实验1编写求圆面积的程序,要求当输入的半径r<=0时,提示输入错误,要求r为浮点型,r的数值是动态的由键盘输入;
    例7-12
    例 7-11
    例7-9
    例7-8
    例7-7
    例7-6
  • 原文地址:https://www.cnblogs.com/hutie1980/p/1403679.html
Copyright © 2011-2022 走看看