Sql?Server存储过程详解
对于名称,有一组简单的规则。
其语法如下所示:
@parameter_name [AS] datatype [=default|NULL] [VARYING] [OUTPUT | OU
声明参数需要以下几部分的信息:名称、数据类型 、默认值 、方向、 对于名称,有一组简单的规则。 其语法如下所示: @parameter_name [AS] datatype [=default|NULL] [VARYING] [OUTPUT | OUT] 一个需要传入参数的存储过程示例: CREATE PROC spName @Name nvarchar(50) AS SELECT Name FROM Person WHERE Name LIKE @Name + '%'; 执行存储过程: EXEC spName '酒'; 2、提供默认值 在默认值方面,参数与变量不同。对于同样的情况,变量一般初始化为NULL值,而参数不是。事实上,如果不提供默认值,则会假设参数是必须的,并且当调用存储过程时需要提供一个初始值。 为了使参数是可选的,必须提供默认值。方法是在数据类型后在逗号之前添加"="符号和作为默认值的值。这样,存储过程的用户可以有决定对此参数不提供值或是提供他们自己的值。 创建一个存储过程如下: CREATE PROC spName @Name nvarchar(50) = NULL AS IF @Name IS NOT NULL SELECT * FROM Person WHERE NAME = @Name ELSE SELECT * FROM Person WHERE Id = 45 执行如下语句: EXEC spName EXEC spName '如意刀狼' 输出结果如下: 3、输出参数 一个获得OUTPUT参数的存储过程: CREATE PROC InsertPerson @Id int OUTPUT --必须注明为OUTPUT AS INSERT INTO Person VALUES('刘备',22,190,'不详','未婚','幼儿园','不详',4999999) SET @Id = @@IDENTITY 执行存储过程: DECLARE @Id int --实际上,调用时名称可以不同,例如也可以为@Num,@i等等。 EXEC InsertPerson @Id OUTPUT --注意此处也要有OUTPUT SELECT @Id 4、返回值。返回值必须是整数。 返回值可用来确定存储过程执行的状态。 SQL Server默认会在完成存储过程时自动返回一个0值。 为了从存储过程向调用代码传递返回值,只需要使用RETURN语句。 RETURN [] 要特别注意的是:返回值必须是整数。 关于RETURN语句,最重要的是知道它是无条件地从存储过程中退出的。无论运行到存储过程的哪个位置,在调用RETURN语句之后将不会执行任何一行代码。 下面的存储过程,让其返回一个指定的值,以指示执行状态。 CREATE PROC spTestReturns AS DECLARE @MyMessage nvarchar(50); DECLARE @MyOtherMessage nvarchar(50); SELECT @MyMessage = '第一个RETURN'; PRINT @MyMessage; RETURN 100; --将这里改成返回100 SELECT @MyOtherMessage = '第二个RETURN'; PRINT @MyOtherMessage; RETURN; 执行之后,显示结果如下: DECLARE @Return int EXEC @Return = spTestReturns //第一个RETURN SELECT @Return //返回100 5、执行存储过程: 对于调用存储过程需要注意以下几点: 6、WITH RECOMPILE选项 可以利用存储过程提供的安全性代码和代码封装方面的好处,但还是忽略了预编译代码方面的影响。可以回避未使用正确的查询计划的问题,因为可以确保为特定一次运行创建新的计划。方法就是使用WITH RECOMPILE选项。 使用该选项的方式有两种: 1、可以在运行时包含WITH RECOMPILE。这告诉SQL Server抛弃已有的执行计划并且创建一个新的计划-但只是这一次。也就是说,只是这次使用WITH RECOMPILE选项来执行存储过程。 EXEC spMySproc '1/1/2004' WITH RECOMPILE 2、也可以通过在存储过程中包含WITH RECOMPILE选项来使之变得更持久。 如果使用这种方式,则在CREATE PROC或ALTER PROC语句中的AS语句前添加WITH RECOMPILE选项即可。如果通过该选项创建存储过程,那么无论在运行时选择了其他什么选项,每次运行存储过程都会重新编译它。 二、修改存储过程:ALTER PROC ALTER PROC spPerson AS SELECT * FROM Person WHERE Id = 45 三、删除存储过程:DROP PROC DROP PROC|PROCEDURE 四、常用存储过程1、sp_help: 查询表的信息 sp_help Person 看一张表有那些信息,有约束,存储过程mssql查看数据库,自定义函数等等信息。 2、sp_helpdb: 查看数据库信息 sp_helpdb TestDataCenter 当然也可以不带参数,显示当前数据库连接下的所有数据库信息。 这张图几乎包含了数据库的所有信息了。有了这张图,想了解一个数据库的信息就简单了。 3、sp_helpindex: 查看有关表或视图上的索引的信息 sp_helpindex Person 注意参数中是表名,上面的Person就是表名,而不是索引名称。 4、sp_helpconstraint: 查看表上的约束信息 sp_helpconstraint Person 注意参数是表名。 5、sp_helpfile: 根据文件逻辑名称, 查看文件的信息 sp_helpfile TestDataCenter 注意参数是文件的逻辑名称。也可以不带参数,输出当前数据库的所有文件信息。 6、sp_helpfilegroup: 根据文件组名称,查看文件组信息 sp_helpfilegroup 'PRIMARY' 参数名中是文件组的逻辑名称,当然也可以不带参数,这样就仅仅输出当前数据库的文件组信息。 显示结果如下: 7、sp_helptext:显示默认值、未加密的 Transact-SQL 存储过程、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束灯等的定义。 sp_helptext spName 返回的是什么?就是定义的代码。 到此这篇关于Sql Server存储过程的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |