`

【SQL Server】存储过程的设计与概念(2)从存储过程接收信息

    博客分类:
  • SQL
阅读更多

从存储过程结束信息的途径有4种:
    1、结果集
    2、输出参数
    3、返回值
    4、全局游标

返回结果集:
    为了从存储过程中获取结果集,需要在存储过程主体中插入返回结果集的T-SQL语句,最简单的方法就是使用SELECT语句,但也可以调用另一个存储过程。
    也可以从一个存储过程中返回多个结果集,这样的存储过程只不过是多包含几个SELECT语句,但要注意有些客户端的数据访问技术可以访问所有的结果集如ADO,ADO.NET,但是有的技术只能访问一个结果集。

输入参数与输出参数:
    创建存储过程使可以包含一个由逗号(,)分割的参数列表,分为两种类型,分别为输入参数和输出参数。参数的默认类型为输入参数:

create proc getJobInfo
@job_id int
as
select * from jobs where job_id=@job_id
go
execute getJobInfo 1

 如下包含一个输出参数,注意output的使用,以及在调用存储过程时接收输出参数的方法:
 

create proc getJobDesc
 @job_id int,
 @job_desc varchar(2000) output
 as
 select @job_desc=job_desc from jobs where job_id=@job_id
 go
 
 declare @desc varchar(2000)
 execute getJobDesc 1,@desc output
print @desc

 参数的默认值:
   如果存储过程语句具有参数,则必须在调用存储过程时提供这些参数的值,否则SQL SERVER 会报错。但也可以为这些参数设定默认值,这样用户就不一定非要提供这些参数了!

ALTER  proc getJobInfo
@job_id int=1
as
select * from jobs where job_id=@job_id
go

execute getJobInfo
execute getJobInfo 2

 按名称传参与按位置传参:
    按位置传参要求各个参数的顺序必须是一定的,而按名称传参则无此限制

 create proc getJob
 @min_lvl int,
 @max_lvl int
 as
 begin
   select * from jobs where min_lvl>@min_lvl and max_lvl<@max_lvl
 end
 
 --按名称传参
execute getJob @max_lvl=800,@min_lvl=10
---按位置传参
execute getJob 10,800 --相当于:execute getJob @min_lvl=10,@max_lvl=800

 返回值:
   每一个存储过程都可以以一个Return语句结尾,该语句的后面紧跟可以被调用者读取的integer值,或结果为整型值的表达式,如果没有显式的设置该值,怎返回默认值0。因为返回值局限于整形数据类型,他们最常用的场合就是向调用者发送状态和错误代码!
   注意以下调用返回值时的方法与OUTPUT的不同:
 

alter proc getJob
 @job_id int,
 @desc varchar(2000) output
 as
 begin
   select @desc=job_desc from jobs where job_id=@job_id 
   return @@error
 end
 
declare @id int,@desc varchar(2000),@result int
-------把存储过程直接赋值给用于接收返回值的变量
execute @result=getJob 1,@desc output
select @result,@desc 

开发人员在运行任何T-SQL语句批处理时,SQL SERVER都要执行以下3步:
       1、解析批处理
       2、编译批处理
       3、执行批处理开发人员在运行任何T-SQL语句批处理时,SQL SERVER都要执行以下3步:
       1、解析批处理
       2、编译批处理
       3、执行批处理
解析
  所谓“解析”是指SQL SERVER 命令解析模块首先检查批处理语法的过程。如果没有找到错误,命令解析器将源代码细分成多个逻辑单元,比如关键字、标识符以及运算符。接着解析器构建一个内部结构,然后使用这个内部结构描述执行请求操作或从源数据提取请求结果集所需的一系列步骤。如果该批处理包含一个查询,那么这个内部结构被称作一个查询树;如果该批处理包含一个过程,那么他被称为一棵顺序树。

编译:
  在这一步中,顺序树被用来生成一个执行计划。优化器模块对可从源表检索信息的各种方法进行分析。它试图寻找一种利用最小资源的最快方法,同时还补充了执行时需要使用的任务列表(例如:检查安全,确认是否强制约束,如果在处理时需要合并的话,还要包含触发器,等等)。结果是一个被称为执行计划的内被结构。

执行:
  执行计划存储在过程告诉缓存中,它可以在那里被执行。执行计划中的不同步骤将被发送到关系引擎中的不同模块进行执行;DML管理器、DDL管理器、存储过程管理器、事务处理管理器或实用工具管理器。处理结果将以结果集的形式被收集并发送给调用者。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shaoboyy/archive/2008/11/12/3281634.aspx 

分享到:
评论

相关推荐

    执行Sqlserver存储过程返回DataSet

    执行Sqlserver存储过程返回DataSet

    Sql Server 存储过程调用存储过程接收输出参数返回值

    创建存储过程: ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,...

    C# winform调用SQL存储过程-菜鸟入门 详细注释

    内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...

    实验9 存储过程的创建和使用

    阅读实验教材《SQL Server 2012数据库管理与开发》第137页到155页的内容,掌握存储过程的概念、了解存储过程的类别(系统存储过程,用户自定义存储过程,扩展存储过程);掌握存储过程的建立;掌握存储过程的两种...

    C#接收存储过程输出参数

    非常简单的一个C#源码文件,C#接收存储过程输出参数。

    如何获取iFix 组态软件的实时数据 并存储到SQL Server

    在实际工作中需要到iFix组态软件获取监控点的实时数据并保存到SQL Server中

    SQL Server中修改“用户自定义表类型”问题的分析与方法

    SQL Server开发过程中,为了传入数据集类型的变量(比如接受C#中的DataTable类型变量),需要定义“用户自定义表类型”,通过“用户自定义表类型”可以接收二维数据集作为参数,在需要修改“用户自定义表类型”的...

    sql-server-maintenance-solution:SQL Server维护解决方案

    SQL Server维护解决方案 ... 支持的版本:SQL Server 2008,SQL Server 2008 R2,SQL Server 2012,SQL Server 2014,SQL Server 2016,SQL Server 2017,SQL Server 2019,Azure SQL数据库和Azure

    C#实现modbus tcp客户端,并将读取的数据存入SQL Server

    本源码由本人根据Modbus tcp报文格式进行开发,没借助任何SDK。数据库设计必须按照文件中图片所示,方能将数据存入数据库,并且数据以字符串形式保存,并以符号_将每个数值隔开

    SQL Server口令 sql server安全性第1/2页

    如果你细心跟踪一下SQL Server数据库服务器的登录过程,你会发现口令计算其实是非常脆弱的,SQL Server数据库的口令脆弱体现两方面:1、网络登陆时候的口令加密算法 2、数据库存储的口令加密算法。 下面就分别...

    ASP与SQL网页数据库程序设计

    使用 404 13-3-2 实际测试 407 13-3-3 使用邮件接收软件验证 411 第14章 范例系统的设计与应用(一)………413 14-1 结构说明 414 14-2 动态菜单的设计 415 14-2-1 设置CSS属性 416 14-2-2 ...

    sqlserver中操作主从关系表的sql语句

    典型的方法就是对于主表的各数据字段进行更新...那么我们就合并到一个存储过程中去完成吧,复杂的参数和接收后处理,让这个存储过程变的困难。下边我就结合实际应用说说此过程吧。应用场景,在学生管理中,添加一条学生

    C++存储过程执行类和线性表

    存储过程(Stored Procedure)是一段预先编译好的可重复使用的数据库操作代码,它保存在数据库中并具有一个独立的名称,可以通过名称来调用执行。...在SQL Server中,可以使用CREATE PROCEDURE语句来创建存储过程,在

    sql server 编译与重编译详解

    当SQLSERVER收到任何一个指令,包括查询(query)、批处理(batch)、存储过程、触发器(trigger) 、预编译指令(prepared statement)和动态SQL语句(dynamic SQL Statement)要完成语法解释、语句解释, 然后再...

    jdbc调用存储过程,函数,游标

    NULL 博文链接:https://sxpujs.iteye.com/blog/376972

    基于Linux系统的sqlserver镜像模式(包含见证)

    数据库镜像通过数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境的另一个SQL Server数据库中来实现。镜像的拷贝是一个备用拷贝,一般情况下不能直接访问,只在主服务器出现错误时提供恢复,镜像服务器...

    (文摘)SQLMail的原理及实际应用

    ----这里所指的SQLMail,是微软公司的关系数据库管理系统 SQLServer所提供的邮件功能。...器或一个存储过程中发送,并且通过SQLServer提供的任务和警 告等功能,可以根据需要在不同的时间和情况下发送。

    NASDAQ凭借SQL Server2005获得更低的TCO

    MDDS从NASDAQ的交易报表系统接收直接的输入,并且收集数据,把它存储在SQL Server 2005中。接着市场参与者便可以对其进行实时查询,使用者包括使用NASDAQ工作站的,使用基于Web工具连接到NASDAQ交易系统的。

    ASP和SQL网站数据库程序设计(DOC)

    ASP和SQL一直深受网站数据库设计人员的喜爱。 本书着重介绍ASP程序设计语言的各种功能及其实际应用, 同时也介绍SQL Server的程序设计技巧。本书将引导读者用ASP语法, 配合数据库系统的开发技巧,构建一个完整的...

Global site tag (gtag.js) - Google Analytics