存储过程浅解

列出驻留在 SQL Server 2005 数据库引擎实例中的数据库或可以通过数据库网关访问的数据库。为什么要使用存储过程?

          使用存储过程可以提高执行速度、允许模式化的程序设计、提高数据的安全性、减少网络流通量等

什么是存储过程?

           存储过程就是将一个或一堆t-sql语句或逻辑控制语句封装起来进行预编译存放在数据库硬盘上以方便日后对该t-sql代码重复执行。

常用的系统存储过程

              存储过程一般分为系统存储过程和用户自定义存储过程,系统存储过程一般以“sp_”为前缀,下面来开一下系统的一些常用的存储过程

sp_help:报告有关数据库对象(sys.sysobjects 兼容视图中列出的所有对象)、用户定义数据类型或某种数据类型的信息。

语法:

sp_help [ [ @objname = ] 'name' ]

其中:[ @objname =] 'name'

                 sysobjects 类型或 systypes 表中任何用户定义数据类型的某个对象的名称。name 的数据类型为 nvarchar(776),默认值为 NULL。不能接受数据库名称。

sp_database:列出驻留在 SQL Server 2005 数据库引擎实例中的数据库或可以通过数据库网关访问的数据库。

语法:

sp_database

sp_helpdb:报告有关指定数据库或所有数据库的信息。

语法:

sp_helpdb [ [ @dbname= ] 'name' ]
其中:[ @dbname= ] 'name'

                    要报告其信息的数据库的名称。name 的数据类型为 sysname,没有默认值。如果未指定 name,则 sp_helpdb 将报告 sys.databases 目录视图中所有数据库的信息。

sp_renamedb:更改数据库的名称

语法:

sp_renamedb [ @dbname = ] 'old_name' , [ @newname = ] 'new_name'
其中:

[ @dbname =] 'old_name'
数据库的当前名称。old_name 的数据类型为 sysname,无默认值。

[ @newname =] 'new_name'
数据库的新名称。new_name 必须遵循有关标识符的规则。new_name 的数据类型为 sysname,无默认值。

sp_tables:返回当前环境下可查询的表或试图的信息

语法:

sp_tables [ [ @table_name = ] 'name' ]      [ , [ @table_owner = ] 'owner' ]      [ , [ @table_qualifier = ] 'qualifier' ]      [ , [ @table_type = ] "type" ] 
     [ , [@fUsePattern = ] 'fUsePattern'];
其中: 

[ @table_name = ] 'name'
用来返回目录信息的表。name 的数据类型为 nvarchar(384),默认值为 NULL。支持通配符模式匹配。

[ @table_owner = ] 'owner'
用于返回目录信息的表的所有者。owner 的数据类型为 nvarchar(384),默认值为 NULL。支持通配符模式匹配。如果未指定所有者,则遵循基础 DBMS 的默认表可见性规则。

在 SQL Server 中,如果当前用户拥有一个具有指定名称的表,则返回该表的列。如果未指定所有者,且当前用户未拥有指定名称的表,则该过程查找由数据库所有者拥有的具有指定名称的表。如果有,则返回该表的列。

[ @table_qualifier = ] 'qualifier'
表限定符的名称。qualifier 的数据类型为 sysname,默认值为 NULL。多种 DBMS 产品支持表的三部分命名方式 (qualifier.owner.name)。在 SQL Server 中,此列表示数据库名称。在某些产品中,该列表示表所在数据库环境的服务器名。

[ , [ @table_type = ] "'type', 'type'" ]
由逗号分隔的值列表,该列表提供有关所有指定的表类型的表的信息。这些类型包括 TABLE、SYSTEMTABLE 和 VIEW。type 的数据类型为 varchar(100),默认值为 NULL。

注意:
每个表类型都必须用单引号引起来,整个参数必须用双引号引起来。表类型必须大写。如果 SET QUOTED_IDENTIFIER 为 ON,则每个单引号必须换成双引号,整个参数必须用单引号引起来。
 


[ @fUsePattern = ] 'fUsePattern'
确定下划线 (_)、百分号 (%) 和方括号([ 或 ])是否解释为通配符。有效值为 0(模式匹配为关闭状态)和 1(模式匹配为打开状态)。fUsePattern 的数据类型为 bit,默认值为 1。

sp_columns:返回当前环境中可查询的指定表或视图的列信息。

语法:

sp_columns [ @table_name = ] object  [ , [ @table_owner = ] owner ]      [ , [ @table_qualifier = ] qualifier ]      [ , [ @column_name = ] column ]      [ , [ @ODBCVer = ] ODBCVer ]
其中:

[ @table_name =] object
用于返回目录信息的表或视图的名称。object_name 的数据类型为 nvarchar(384),没有默认值。支持通配符模式匹配。

[ @table_owner =] owner
用于返回目录信息的表或视图的对象所有者。owner 的数据类型为 nvarchar(384),默认值是 NULL。支持通配符模式匹配。如果未指定 owner,则应用基础 DBMS 的默认表或视图可见性规则。

如果当前用户拥有的表或视图具有指定名称,则返回该表的列。如果未指定 owner,并且当前用户不拥有具有指定 object 的表或视图,则 sp_columns 将搜索数据库所有者所拥有的具有指定 object 的表或视图。如果有,则返回该表的列。

[ @table_qualifier =] qualifier
表或视图限定符的名称。qualifier 的数据类型为 sysname,默认值是 NULL。许多 DBMS 产品都支持表的三部分构成命名方式 (qualifier.owner.name)。在 SQL Server 中,此列表示数据库名称。在某些产品中,该列表示表所在数据库环境的服务器名。

[ @column_name =] column
一个单独的列,当只需要目录信息的一列时可使用该参数。column 的数据类型为 nvarchar(384),默认值是 NULL。如果未指定 column,则返回所有列。在 SQL Server 中,column 表示在 syscolumns 表中列出的列名。支持通配符模式匹配。为了获得最大互操作性,网关客户端应只采用 SQL-92 标准模式匹配(% 和 _ 通配符)。

[ @ODBCVer =] ODBCVer
所使用的 ODBC 的版本。ODBCVer 的数据类型为 int,默认值为 2。这指示 ODBC 版本 2。有效值为 2 或 3。对于版本 2 和 3 之间的行为差异,请参阅 ODBC SQLColumns 规范
sp_helpconstraint:查看某个表的约束

语法:

sp_helpconstraint [ @objname = ] 'table'      [ , [ @nomsg = ] 'no_message' ] 

其中:

[ @objname = ] 'table'
关于所返回的约束信息的表。对于当前数据库而言,指定的表必须位于本地。table 的数据类型为 nvarchar(776),无默认值。

[ @nomsg =] 'no_message'
打印表名的可选参数。no_message 的数据类型为 varchar(5),默认值是 msg。nomsg 表示取消打印。
sp_helpindex:查看某个表的索引

语法:

sp_helpindex [ @objname = ] 'name'
其中:

[ @objname =] 'name'
用户定义的表或视图的限定或非限定名称。 仅当指定限定的表或视图名称时,才需要使用引号。 如果提供了完全限定名称,包括数据库名称,则该数据库名称必须是当前数据库的名称。name 的数据类型为 nvarchar(776),无默认值。
sp_stored_procedures:返回当前环境中的存储过程列表。

语法:

sp_stored_procedures [ [ @sp_name = ] 'name' ]     [ , [ @sp_owner = ] 'schema']     [ , [ @sp_qualifier = ] 'qualifier' ]
    [ , [@fUsePattern = ] 'fUsePattern' ]
其中:

[ @sp_name = ] 'name'
用于返回目录信息的过程名。name 的数据类型为 nvarchar(390),默认值为 NULL。支持通配符模式匹配。

[ @sp_owner = ] 'schema'
该过程所属架构的名称。schema 的数据类型为 nvarchar(384),默认值为 NULL。支持通配符模式匹配。如果未指定 owner,则遵循基础 DBMS 的默认过程可见性规则。

在 SQL Server 中,如果当前架构包含具有指定名称的过程,则返回此过程。如果指定了非限定存储过程,则数据库引擎按以下顺序搜索此过程:

当前数据库的 sys 架构。


调用方的默认架构(在使用批或动态 SQL 执行时);或者,如果非限定的过程名称出现在另一个过程定义的主体中,则接着搜索包含这一过程的架构。有关默认架构的详细信息,请参阅用户架构分离。


当前数据库中的 dbo 架构。


[ @qualifier = ] 'qualifier'
过程限定符的名称。qualifier 的数据类型为 sysname,默认值为 NULL。多种 DBMS 产品支持表的三部分命名方式 (qualifier.schema.name)。在 SQL Server 中,qualifier 表示数据库名称。在某些产品中,它表示表所在数据库环境的服务器名称。

[ @fUsePattern = ] 'fUsePattern'
确定是否将下划线 (_)、百分号 (%) 或 方括号 ([ ]) 解释为通配符。fUsePattern 的数据类型为 bit,默认值为 1。

0 = 禁用模式匹配。

1 = 启用模式匹配

sp_password:为 Microsoft SQL Server 登录名添加或更改密码

语法:

sp_password [ [ @old = ] 'old_password' , ]      { [ @new =] 'new_password' }      [ , [ @loginame = ] 'login' ]
其中:

[ @old = ] 'old_password'
旧密码。old_password 的数据类型为 sysname,默认值为 NULL。

[ @new = ] 'new_password'
新密码。new_password 的数据类型为 sysname,无默认值。如果没有使用命名参数,则必须指定 old_password。
[ @loginame = ] 'login'
受密码更改影响的登录名。login 的数据类型为 sysname,默认值为 NULL。login 必须已经存在,并且只能由 sysadmin 或 securityadmin 固定服务器角色的成员指定。

sp_helptext:显示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束、视图或系统对象(如系统存储过程)。

语法:

sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ]
其中:

[ @objname = ] 'name'
架构范围内的用户定义对象的限定名称和非限定名称。仅当指定限定对象时才需要引号。如果提供的是完全限定名称(包括数据库名称),则数据库名称必须是当前数据库的名称。对象必须在当前数据库中。name 的数据类型为 nvarchar(776),无默认值。

[ @columnname = ] 'computed_column_name'
要显示其定义信息的计算列的名称。必须将包含列的表指定为 name。column_name 的数据类型为 sysname,无默认值。

用户自定义的存储过程

创建存储过程的语法:

           CREATE PROC[EDURE] 存储过程名

         【 {@参数1  数据类型}【=默认值】【OUTPUT】,

              ……,

              {@参数1  数据类型}【=默认值】【OUTPUT】

           】

        as

             SQL语句

其中:加【output】标示输出的参数不加则标示输入的参数

删除存储过程语法:

DROP PROC[EDURE]   。不 开幕词,、 v;'s,.'  v,lllllly'[;;;;;;;;;n了共和国, 存储过程名

处理错误信息

raiserror语句

语法:

raiserror  ({msg_id|msg_str}{,severity,state} 【with option【,……n】】)

其中:

msg_id:在messages系统表中指定的用户定义错误信息

  msg_str:用户定义的特定信息,最长为255个字符

  severity:与特定信息关联,表示用户定义的严重性级别。用户可使用的级别为0~18级,19~25级是为sysadmin固定角色的成员预留的,并且需要指定with log 选项;20~25级被认为是致命错误

   state:表示错误状态,是1~255中的值

   option:错误的定义选项,可以使下列任意值:

                 log:在数据库的错误日志和应用程序的日志中记录错误

                 nowait:将消息立即发送给客户端

                 seterror:将@@error值和error_number值设置为msg_id或50000,不用考虑严重级别。

原文地址:https://www.cnblogs.com/wangzheand/p/5137156.html