首页 / 知识
从存储过程中访问结果集Transact-SQL SQL Server
2023-04-15 02:57:00

Access to Result sets from within Stored procedures Transact-SQL SQL Server我正在使用SQL Server 2005,我想知道如何从transact-sql中访问不同的结果集。 以下存储过程返回两个结果集,如何从另一个存储过程中访问它们?
我需要能够分别遍历两个结果集。 编辑:只是为了澄清问题,我想测试存储过程。 我有一组从VB.NET客户端使用的存储过程,该存储过程返回多个结果集。 这些将不会更改为表值函数,实际上我根本无法更改过程。 更改程序不是一种选择。 过程返回的结果集是不同的数据类型或列数。 简短的答案是:您无法做到。 在T-SQL中,如果不像其他人建议的那样更改存储过程,则无法访问嵌套存储过程调用的多个结果。 为了完成此过程,如果该过程返回单个结果,则可以使用以下语法将其插入到临时表或表变量中:
您可以对返回多个结果的过程使用相同的语法,但该过程仅处理第一个结果,其余的将被丢弃。 通过创建一个包含内部数据集的SQL2005 CLR存储过程,我很容易做到这一点。 您会看到,默认情况下,新的SqlDataAdapter将.multiple-result-set sproc填充到多表数据集中。这些表中的数据可以依次插入到您要编写的调用过程中的#Temp表中。 dataset.ReadXmlSchema将为您显示每个结果集的架构。 第1步:开始编写sproc,它将从多结果集sproc中读取数据 一种。根据架构为每个结果集创建一个单独的表。
b。此时,您可能需要声明一个游标以重复调用将在此处创建的CLR proc: 步骤2:制作CLR Sproc
一种。使用 b。设置命令对象(cmd)以包含多结果集的proc。 C。使用以下命令获取所有数据:
d。遍历每个表,并将每一行插入适当的临时表(在上面的第一步中创建)。
最后说明: 仅此而已! ?西雅图附近的肖恩 您也可以做一个杂技。 向您的存储过程中添加一个可选参数N int。 将N的默认值设置为-1。 如果N的值为-1,则执行选择的每一项。 否则,请执行第N个选择,而仅执行第N个选择。 例如,
没有指定N的sproc调用者将获得一个包含多个表的结果集。 如果需要从另一个存储过程中提取一个或多个这些表,只需调用存储过程为N指定一个值即可。您必须为要提取的每个表调用该存储过程一次。 如果从结果集中需要多个表,效率会很低,但是它确实可以在纯TSQL中工作。 请注意,INSERT INTO ... EXEC语句还有一个额外的,未记录的限制:它不能嵌套。也就是说,EXEC调用的存储过程(或依次调用的任何过程)本身无法执行INSERT INTO ... EXEC。似乎每个进程都有一个暂存器来累积结果,并且如果嵌套了它们,则在调用者打开它时,您将得到一个错误,然后被调用者尝试再次打开它。 Matthieu,您需要为每种"类型"的结果维护单独的临时表。另外,如果您要多次执行同一调用,则可能需要在该结果中添加一个额外的列,以表明它来自哪个调用。 可悲的是,这是不可能的。问题是,当然,没有SQL语法允许它。当然,这是在"幕后"发生的,但是您无法在TSQL中获得这些其他结果,只能从应用程序通过ODBC或其他方式获得。 与大多数事情一样,有一种解决方法。诀窍是在TSQL中使用ole自动化创建一个ADODB对象,该对象依次打开每个结果集并将结果写到您指定的表中(或对结果集执行任何操作)。如果您感到痛苦,也可以在DMO中进行。 有两种方法可以轻松地做到这一点。将结果粘贴到临时表中,然后从存储过程中引用该临时表。另一种选择是将结果放入一个XML变量中,该变量用作OUTPUT变量。 但是,这两种选择都有其优缺点。对于临时表,您需要在创建调用过程的脚本中添加代码,以在修改过程之前创建临时表。同样,您应该在过程结束时清理临时表。 使用XML,可能会占用大量内存并且速度很慢。 您可以将它们选择到临时表中或编写表值函数以返回结果集。是否在询问如何遍历结果集? |
最新内容
相关内容
linux访问网址命令?
linux访问网址命令?,地址,网络,系统,手机,设备,信息,网址,命令,首次,管理,linux命令行打开火狐浏览器并跳转到想访问的地址程序设定。在编程软linux命令下访问页面?
linux命令下访问页面?,系统,数据,传播,网址,环境,密码,信息,地址,软件,工作,linux,按了ctrl+alt+F1,进入了类似纯命令行的界面,让输入login信linux访问网站的命令?
linux访问网站的命令?,地址,系统,服务,工作,网站,命令,网络,管理,信息,网址,Linux必学的网络操作命令Linux的网络命令比较多,其中一些命令像pinlinux访问模板命令?
linux访问模板命令?,工作,地址,系统,信息,管理,命令,目录,发行,设备,文件,linux系统常用操作命令1、linux常用命令有pwd命令、cd命令、ls命令命令访问linux系统?
命令访问linux系统?,系统,地址,信息,软件,命令,时间,工具,网络,管理,电脑,linux文件系统常用命令linux常用命令:查看内核版本:uname-a。图形界面linux命令访问网页?
linux命令访问网页?,地址,传播,网络,系统,软件,网址,密码,服务,数据,首次,linux命令行打开火狐浏览器并跳转到想访问的地址程序设定。在编程软linux访问日志的命令?
linux访问日志的命令?,系统,信息,对比,实时,基础,日志,命令,文件,设备,管理,linux系统常用命令熟悉吗?如何在日志文件中,定位用户请求1、“chmlinux网页访问命令?
linux网页访问命令?,地址,网络,工作,系统,命令,传播,信息,软件,代码,首次,在Linux下怎么通过命令上网1、首先,连接相应linux主机,进入到linux命linux访问日志命令?
linux访问日志命令?,系统,信息,对比,日志,简介,管理,情况,实时,命令,文件,查看linux系统日志的命令1、第一种:查看实时变化的日志(比较吃内存)。linux访问d盘命令?
linux访问d盘命令?,系统,管理,电脑,设备,软件,概念,信息,分区,文件,命令,...6.2的Linux系统,Linux系统无法识别ntfs格式的D盘,不重装系统的情linux文件访问命令行?
linux文件访问命令行?,系统,地址,工作,图片,命令,标准,名称,情况,官方网站,信息,如何使用命令行在Linux中查找文件和文件夹列出文件清单命令,lslinux客户访问命令?
linux客户访问命令?,网络,系统,地址,服务,管理,信息,数字,基础,密码,命令,Linux下定制SSH来简化远程访问教程1、/etc/ssh/ssh_config 为默认的