作者:liigo

日期:2010/8/25

Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output参数返回一个或多个值,返回一个记录集(recordset)。无论哪一种情况,无论输入输出参数多复杂的存储过程,都可以在易语言中正确调用,准确的传入参数,并获取正确的输出数据。下面我(liigo)分多种情况介绍在易语言中调用MS SQL SERVER数据库存储过程的详细方法,使用数据库操作支持库(eDatabase.fne)。此前多有人说易语言无法调用数据库存储过程,或咨询调用存储过程的方法,因成此文。

一、调用“无输入输出数据”的存储过程

这是最简单的情况,执行一个简单的SQL语句就OK了,下面直接给出代码:

数据库连接1.执行SQL (“exec dbproc”)

其中,“数据库连接1”是数据库操作支持库中“数据库连接”控件的实例,"exec" 表示调用存储过程,"dbproc"为被调用的存储过程的名称。即使存储过程有返回值,在不想接收返回值的情况下,也可按这种方法调用。

二、调用“有一个或多个输入参数”的存储过程

一个输入参数的情况(其中5为参数值,跟在存储过程名称之后,以空格分隔):

数据库连接1.执行SQL (“exec dbproc_p1 5”)

两个输入参数的情况(其中3和6为参数值,之间以逗号分隔):

数据库连接1.执行SQL (“exec dbproc_p2 3,6”)

三、调用“返回记录集(recordset)”的存储过程

存储过程最后一条SQL语句为Select语句,通常将返回一个记录集(recordset)给调用者。在易语言中,可通过数据库操作支持库中的“记录集”控件接收该记录集,具体代码如下图:

核心代码就是中间淡黄底色加亮的那一行(记录集1.打开),这行代码执行成功后,记录集1内容就是存储过程返回的recordset内容,通过一个简单的循环语句可以遍历所有记录。实际使用中,应检查“记录集1.打开”调用是否成功,上图为简化起见省略之。

下文更复杂的情况,也是用大概相同的代码,仅中间淡黄底色加亮的那一行有所变化。

四、调用“返回记录集(recordset)且有一个或多个输入参数”的存储过程

代码与前面大致相同,只是调整了中间一行调用存储过程的SQL语句的写法,前面都有涉及,无需多言:

记录集1.打开 (“exec dbproc_p1 5”, #SQL语句, )

记录集1.打开 (“exec dbproc_p2 3,6”, #SQL语句, )

五、调用“直接返回(return)一个值”的存储过程

此类返回值相当于易语言子程序的返回值,是在存储过程代码内部使用 return 指令返回的。欲得到这个返回值,稍微有点麻烦,且看代码:

记录集1.打开 (“declare @R int; exec @R = dbproc_r; select @R”, #SQL语句, )

这里面我(liigo)用了三条SQL语句(严格来说是Transact-SQL语句),各语句之间以分号分隔。第一条 "declare @R int" 定义了一个类型为 int 的变量 @R,第二条 "exec @R = dbproc_r" 调用存储过程并把其返回值赋值给变量@R,第三条,"select @R" 生成一个只有一条记录和一个字段的记录集。代码执行成功后,读取 记录集1 第一条记录第一个字段就得到了存储过程的返回值,完整代码可参考前图。实际应用中,应注意存储过程返回值类型的匹配。@R改成@abc都无所谓,但@符号必须保留(变量或参数的前缀)。

如果这个存储过程还有输入参数呢?直接把参数值附加在存储过程名称后面即可,形如:记录集1.打开 (“declare @R int; exec @R = xproc_r_p2 3,6; select @R”, #SQL语句, )。

六、调用“通过OUTPUT参数返回值”的存储过程

存储过程中有一种output参数既是输入参数又是输出参数,它的值可被存储过程内部改写。大概相当于易语言子程序的“参考”参数。调用代码如下:

记录集1.打开 (“declare @P int; exec dbproc_o @P output; select @P”, #SQL语句, )

仍然是借助一个变量@P得到输出参数的值(注意类型要匹配),然后生成一个单记录单字段的记录集,执行成功后通过记录集1读取该字段值即可。调用存储过程的SQL语句 "exec xproc_o @P output" 中,output表示这个参数可以接收返回值。

七、调用“同时存在返回值和OUTPUT参数”的存储过程

这是前面两种情况的综合运用,可借助多个变量解决,代码形如:记录集1.打开 (“declare @R int; declare @P1 int; declare @P2 int; exec @R = xproc_r_p3 100,@P1 output,@P2 output; select @R,@P1,@P2”, #SQL语句, )。

八、思考:调用“既有OUTPUT参数(或返回值)又返回记录集”的存储过程

我(liigo)暂时无解。

附,相关测试用存储过程代码:

create proc dbproc

as

begin

insert into atable (f1,f3) values (0, 0)

select * from atable

end

go

create proc dbproc_p1

@maxf1 int

as

select * from atable where f1 <= @maxf1

go

create proc dbproc_p2

@minf1 int,

@maxf1 int

as

select * from atable where f1 between @minf1 and @maxf1

go

create proc dbproc_r

as

return 123

go

create proc dbproc_o

@op int output

as

set @op = 123

go

全文完。

易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...相关推荐

  1. SQL Server数据库存储过程——以自定义存储过程为例

    SQL Server数据库存储过程--以自定义存储过程为例 1.什么是数据库存储过程 存储过程就是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元处理.存储过程代替了传统的逐条执行SQL ...

  2. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程方法总结

    五.调用"直接返回(return)一个值"的存储过程 此类返回值相当于易语言子程序的返回值,是在存储过程代码内部使用 return 指令返回的.欲得到这个返回值,稍微有点麻烦,且看 ...

  3. SQL Server数据库-存储过程(第一讲)

    先上代码 --///[存储过程] --1.新建存储过程/*---检查是否存储过程是否已存在---*/ IF EXISTS (SELECT * FROM sysobjects WHERE name = ...

  4. 如何将matlab代码转为C语言(2)--在C++中调用matlab的函数

    如何将matlab代码转为C语言(2)–在C++中调用matlab的函数 在上一条博文中提供了一种直接在matlab操作中的方法,下面提供一种新的调用方法,即在C++中调用matlab中的dll文件. ...

  5. C语言连接SQL Server数据库并且完成一次简易操纵

    本文旨在针对SQL完全小白的朋友,让其了解C语言连接SQL Server的方法,并且完成一个简易操纵(可以是写入/读出/增删查改).本文使用的是SQL Server 2019,安装教程可参考SqlSe ...

  6. 使用c语言操作sql server数据库

    本文使用c语言来对sql server数据库进行操作,实现通过程序来对数据库进行增删改查操作. 操作系统:windows 10         实验平台:vs2012  +  sql server 2 ...

  7. 使用C语言来操作SQL SERVER数据库

    本文转自                         http://simpledev.iteye.com/blog/339537 1.使用C语言来操作SQL SERVER数据库,采用ODBC开放 ...

  8. SQL Server在存储过程中编写事务处理代码的三种方法

    SQL Server中数据库事务处理是相当有用的,鉴于很多SQL初学者编写的事务处理代码存往往存在漏洞,本文我们介绍了三种不同的方法,举例说明了如何在存储过程事务处理中编写正确的代码.希望能够对您有所 ...

  9. 从sqlserver中数据写入mysql_[SQL Server]SQL Server数据库中如何返回INSERT INTO语句插入/写入数据后的记录值(比如ID等)?...

    问题描述 SQL Server数据库中,有时候当我们使用INSERT INTO语句写入数据后,需要返回写入数据对应的自增ID或者GUID,以便根据此记录进行后续的操作.那么SQL语句如何实现返回记录值 ...

最新文章

  1. LeetCode简单题之拼写单词
  2. 分布式技术一周技术动态 2016-11-27
  3. java p7 数字签名,p7结构的数字信封 | 学步园
  4. 类属性的存储和this指针
  5. iOS 推送手机消息背后的技术
  6. 实战Java内存泄漏问题分析 -- hazelcast2.0.3使用时内存泄漏 -- 2
  7. Vuex 模块化与项目实例 (2.0)
  8. LeetCode 453. 最小移动次数使数组元素相等(数学)
  9. 【Java】如何理解Java中的双列集合Map?
  10. 把地图中的道路以线条提取出来_自动驾驶中基于车道线的高清制图方法回顾
  11. cocos2d(CCSprite 用贝塞尔做抛物线,足球精灵并且同时做旋转放大效果)
  12. 【大数据部落】IBM SPSS Modeler通过数据挖掘我们能从股市数据得到什么
  13. 初始化string对象的方式
  14. i2c-tools下载安装及使用调试
  15. IOS越狱插件安装后设置里边未显示
  16. Windows清理C盘空间
  17. 论文Robust Range Estimation with a Monocular Camera for Vision-Based FCW System解读
  18. Mybatis 报错Mapper method ‘xxx‘ has an unsupported return type,解决办法
  19. 亲身测评趣趣abc英语,揭露机构的优缺点!
  20. 怎么将两段视频合并在一起?快速操作技巧

热门文章

  1. ssh转发代理:ssh-agent用法详解
  2. beta冲刺7-咸鱼
  3. 游戏开发中常用的设计模式
  4. Create an offline installation of Visual Studio 2017 RC
  5. angular $location服务获取url
  6. android缓存框架SimpleCache
  7. python中列表相加规则_在Python字典列表中使用公共键/值求和值
  8. 吃豆人动态模型创建---canvas
  9. Python+sklearn训练结果保存与加载(以垃圾邮件分类为例)
  10. 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)