解读SQL存储过程入门级教程(4)_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:按指定排列顺序获取数据的sql语句
测试table create table table1 (id int,name char) insert into table1 select 1,'q' union all select 2,'r' union all select 3,'3' union all select 4,'5' 要求按指定的id顺序(比如2,1,4,3)排列获取table1的数据 方法1: 使用union all,但是有256条数据的



说明 SQL Server 是将空字符串解释为单个空格还是解释为真正的空字符串,由兼容级别设置控制。
如果兼容级别小于或等于 65,SQL Server 就将空字符串解释为单个空格。
如果兼容级别等于 70,则 SQL Server 将空字符串解释为空字符串。
获得有关存储过程的信息
若要显示用来创建过程的文本,请在过程所在的数据库中执行 sp_helptext,并使用过程名作为参数。 


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


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

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


引用对象

SQL Server 允许创建的存储过程引用尚不存在的对象。在创建时,只进行语法检查。执行时,如果高速缓存中尚无有效的计划,则编译存储过程以生成执行计划。只有在编译过 程中才解析存储过程中引用的所有对象。因此,如果语法正确的存储过程引用了不存在的对象,则仍可以成功创建,但在运行时将失败,因为所引用的对象不存在。
延迟名称解析和兼容级别
SQL Server 允许 Transact-SQL 存储过程在创建时引用不存在的表。这种能力称为延迟名称解析。不过,如果 Transact-SQL 存储过程引用了该存储过程中定义的表,而兼容级别设置(通过执行 sp_dbcmptlevel 来设置)为 65,则在创建时会发出警告信息。而如果在运行时所引用的表不存在,将返回错误信息。

执行存储过程

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

使用 cursor 数据类型的参数

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



说明 cursor 数据类型不能通过数据库 API(例如 OLE DB、ODBC、ADO 和 DB-Library)绑定到应用程序变量上。因为必须先绑定 OUTPUT 参数,应用程序才可以执行存储过程,所以带有 cursor OUTPUT 参数的存储过程不能通过数据库 API 调用。只有将 cursor OUTPUT 变量赋值给 Transact-SQL 局部 cursor 变量时,才可以通过 Transact-SQL 批处理、存储过程或触发器调用这些过程。


Cursor 输出参数
在执行过程时,以下规则适用于 cursor 输出参数: 

对于只进游标,游标的结果集中返回的行只是那些存储过程执行结束时处于或超出游标位置的行,例如: 
在过程中的名为 RS 的 100 行结果集上打开一个非滚动游标。 

过程提取结果集 RS 的头 5 行。

过程返回到其调用者。


返回到调用者的结果集 RS 由 RS 的第 6 到 100 行组成,调用者中的游标处于 RS 的第一行之前。 
对于只进游标,如果存储过程完成后,游标位于第一行的前面,则整个结果集将返回给调用批处理、存储过程或触发器。返回时,游标将位于第一行的前面。


对于只进游标,如果存储过程完成后,游标的位置超出最后一行的结尾,则为调用批处理、存储过程或触发器返回空结果集。 

说明 空结果集与空值不同。

对于可滚动游标,在存储过程执行结束时,结果集中的所有行均会返回给调用批处理、存储过程或触发器。返回时,游标保留在过程中最后一次执行提取时的位置。

对于任意类型的游标,如果游标关闭,则将空值传递回调用批处理、存储过程或触发器。如果将游标指派给一个参数,但该游标从未打开过,也会出现这种情况。 

说明 关闭状态只有在返回时才有影响。例如,可以在过程中关闭游标,稍后再打开游标,然后将该游标的结果集返回给调用批处理、存储过程或触发器。

分享:总结经典常用的SQL语句(2)
向表中添加一个新记录,你要使用SQLINSERT语句。 这里有一个如何使用这种语句的例子: INSERTmytable(mycolumn)VALUES(‘somedata’) 这个语句把字符串’somedata’插入表mytable的mycolumn字段中。将要被插入数据的字段的名字在第一个括号中指定,实际的数

来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2010-04-06
相关Mssql数据库教程