执行具有多个结果集的存储过程

2023-12-02

我正在使用 SSIS 2016。

  • 存储过程返回 4 个结果集。
  • 只有第一个结果集是相关的,需要写入表中。
  • 我无法修改存储过程。
  • 我不关心其他结果集中返回的任何数据。

存储过程位于 SQL Server 2016 数据库中。结果也将驻留在 SQL Server 2016 中。

我目前在 SSIS 2008 中使用 OLE DB 源中的“SQL 命令”数据访问模式运行此进程,如下所示。我将其放在 For Each 循环容器中,以便将一系列参数值传递给存储过程,因为我每天对不同的参数值执行多次。

SET FMTONLY OFF;

EXEC myProc
     @Param1 = ?,
     @Param2 =?,
     @Param3 = ?;

默认情况下,SSIS 2008 仅返回第一个结果集,这对我有用,因为我只关心第一个结果集。

我正在使用本机 OLEDB SQL Server 客户端。据我所知,它改变了处理多个结果集的方式。我已经用过WITH RESULT SETS定义第一个结果集,但如果我执行 SSIS 将失败,表明需要定义其他结果集。

简而言之,在 SSIS 2016 中复制 SSIS 2008 中的功能的最佳方法是什么?


解决方案概述

我就这个问题做了2个实验,第一个实验表明,在没有参数的存储过程的情况下,SQL Server 2016和SSIS 2016中没有任何变化,第一个结果集被返回,其他结果集被忽略。

第二个实验表明,当使用参数时,这会抛出异常,所以你必须使用定义元数据WITH RESULT SETS选项,然后删除该选项。


详细解决方案

实验1

以下实验是使用 SQL Server 2016 和 Visual Studio 2015 以及 SSDT 2016 进行的

  1. 首先我创建了这个存储过程

    CREATE PROCEDURE sp_Test
    
    
    AS
    BEGIN
    
    SET NOCOUNT ON;
    
    SELECT TOP 10 PersonType,NameStyle,Title 
      FROM [AdventureWorks2016CTP3].[Person].[Person]
    
    SELECT  TOP 10 PersonType,Firstname,Lastname
      FROM [AdventureWorks2016CTP3].[Person].[Person_json]
    END
    GO
    
  2. 然后我向 SSIS 包添加了一个数据流任务
  3. 添加了 OLEDB 源、记录集目标
  4. 在 OLEDB 源中,我选择数据访问模式SQL command
  5. 使用以下命令

    EXEC sp_Test
    

enter image description here

  1. 单击“列”选项卡时,它会显示第一个结果集结构

enter image description here

  1. 我们执行了它运行成功的包

enter image description here

实验2

我将存储过程更改为以下内容:

ALTER PROCEDURE [dbo].[sp_Test]

    @param1 varchar(10),
    @param2 varchar(10),
    @param3 varchar(10)
AS
BEGIN

    SET NOCOUNT ON;


    SELECT TOP 10 PersonType,NameStyle,Title ,@param2 as 'Param'
  FROM [AdventureWorks2016CTP3].[Person].[Person]


    SELECT  TOP 10 PersonType,Firstname,Lastname,@param3 as 'Param'
  FROM [AdventureWorks2016CTP3].[Person].[Person_json]
END

我在 OLEDB 源中使用了以下 SQL 命令:

EXEC sp_Test ?,?,?

WITH RESULT SETS (
(
    PersonType NVarchar(10),
    NameStyle NVarchar(10),
    Title  NVarchar(10),
    Param Varchar(10)
)
)

我正确映射了参数。

enter image description here

enter image description here

运行包时会抛出以下异常。

[OLE DB 源2] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80040E14 描述:“EXECUTE 语句失败,因为其WITH RESULT SETS 子句指定了 1 个结果集,并且该语句尝试发送比这更多的结果集。”。

之后我尝试删除With RESULT SETS选项,所以命令是:

EXEC sp_Test ?,?,?

我尝试再次执行该包,因此执行时没有错误。

结论

尝试使用WITH RESULT SETs选项来定义OLEDB Source metadata,定义元数据后,只需删除此选项并运行包,这样它就会成功获取第一个结果集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行具有多个结果集的存储过程 的相关文章

  • TSQL - 创建从日期表,同时忽略带条件的中间步骤

    我在 MS SQL 服务器中有以下表结构 现在 我想根据以下规则获取每个 id 的 in 日期 如果第二天 23 59 出 和 00 00 进 则忽略这些 如果同一天有 out 和 in 请忽略这些 例如我应该得到以下结果 id in ou
  • Sql Server 字符串到日期的转换

    我想像这样转换一个字符串 10 15 2008 10 06 32 PM 转换为 Sql Server 中的等效 DATETIME 值 在 Oracle 中 我会这样说 TO DATE 10 15 2008 10 06 32 PM MM DD
  • Sequelize mssql:按主键和限制排序

    我想运行一个使用主键对结果进行排序的查询 并限制返回结果的数量 例如 return Things findAll attributes id status otherField limit 2 order id DESC 构建查询时 会生成
  • SQL Server 表中最多可以有多少行

    通常我们可以给出更多的值 在SQL Server中一个表最多可以有多少行 之后我们就无法添加新行了 有一些边缘情况 除了明显的磁盘空间问题之外 SQL Server 会阻止您添加更多行 而不是确切的行数 但值得一提 你有一个IDENTITY
  • 如何修复 SSIS“文件/进程不在路径中”警告?

    SSIS 附带了许多解决数据获取和集成问题的任务 但它缺少的一项任务是用于通过 HTTP 下载文件的 HTTP 任务 为了解决这个问题 我安装了Wget http gnuwin32 sourceforge net packages wget
  • 插入并发问题-多线程环境

    我有一个问题 即使用完全相同的参数在完全相同的时间调用相同的存储过程 存储过程的目的是获取记录 如果存在 或创建并获取记录 如果不存在 问题是两个线程都在检查记录是否存在并报告错误 然后都插入新记录 在数据库中创建重复记录 我尝试将操作保留
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • SQL 查询在多用户环境中返回错误值

    一段时间以来 我们在我们的一个客户站点上发现了奇怪的数据完整性问题 经过大量调查后 我们现在已将其隔离为数据库调用 如果两个用户同时调用同一个存储过程 有时一个用户会得到另一个用户的结果 我们设置了一个测试来验证这一点 并且我们有一个循环
  • SQL中如何合并多个表的数据

    我想我的处境很复杂 这是场景 我在 SQL Server 中有 3 个表 注册 学生 课程 仅供参考 没有外键 表的列是 Student 学生号 学生名 Course 课程 ID 课程名称 注册 注册 ID 学生 ID 课程 ID 课程结果
  • 从 PowerShell 运行 SSIS 包,无需部署项目

    This https learn microsoft com en us sql integration services ssis quickstart run powershell view sql server ver16 ssis
  • 仅当所有记录都匹配时 SQL 连接

    我有3张桌子 CP carthead idOrder CP cartrows idOrder idCartRow CP shipping idCartRow idShipping dateShipped 每个 idOrder 可以有多个 i
  • 有很多数据库视图可以吗?

    我很少 每月 每季度 使用 Microsoft SQL Server 2005 数据库视图生成数百份 Crystal Reports 报告 在我不读取这些视图的所有时间里 这些视图是否会浪费 CPU 周期和 RAM 因为我很少从视图中读取数
  • 将 SQL Server 日期时间转换为较短的日期格式

    我有一个datetimeSQL Server 中的列为我提供了这样的数据10 27 2010 12 57 49 pm我想查询此列 但只需让 SQL Server 返回年月日 例如 2010 10 27或类似的东西 我应该研究哪些功能 我应该
  • SQL Server:触发器如何读取插入、更新、删除的值

    我在一张表中有触发器并且想阅读UserId插入 更新或删除行时的值 怎么做 下面的代码不起作用 我收到错误UPDATED ALTER TRIGGER dbo UpdateUserCreditsLeft ON dbo Order AFTER
  • 复制数据库的最佳方法是什么?

    当我想要复制数据库时 我总是创建一个新的空数据库 然后将现有数据库的备份恢复到其中 然而 我想知道这是否真的是最不容易出错 最不复杂且最有效的方法 可以跳过创建空数据库的步骤 您可以在恢复过程中创建新数据库 这实际上是我所知道的克隆数据库最
  • 在SQL中,如何通过查找与某一列相等的所有行来更新表的每一行,然后将另一列设置为彼此相等

    所以基本上这就是伪代码 但我不知道如何在 SQL 中执行此操作 请帮忙 for each row in table1 loop through each row in table 2 if table1 s row column 1 tab
  • [SqlException (0x80131904) 的问题:无效的对象名称“dbo.TableName”。]

    我在 google 和 stackoverflow 中查找 但没有找到答案 如何通过 VS 2010 中的连接字符串连接到我的数据库表
  • SQL Server lat;lng varchar 分割过程用作 Lat 和 Lng 以提高搜索速度

    有人可以帮助我使用存储过程或函数来传递我的存储varchar表中的 lat lng 到各个字段作为浮点数作为 Lat 和 Lng 以在半径搜索中使用 lanlng in Table 33 0000 15 222222 Thanks 你只是想
  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • 批量插入不适用于 NULL 数据

    当我从 CSV 文件将批量数据插入到表中时 它不起作用 显示错误 第 2 行第 9 列的批量加载数据转换错误 类型不匹配或指定代码页的字符无效 csv 文件中的第 9 列值为空 我该如何处理这个问题 根据这些信息 我认为目标表的特定字段被定

随机推荐

  • 通过排除导航和 Chrome 内容从 HTML 页面中提取纯内容/文本

    我正在爬取新闻网站 想要提取新闻标题 新闻摘要 第一段 等 我插入了 webkit 解析器代码 以树状方式轻松导航网页 为了消除导航和其他非新闻内容 我采用文章的文本版本 减去 html 标签 webkit 提供了相同的 api 然后我运行
  • Codeigniter 显示错误:未选择数据库

    我正在使用 Codeigniter DBForge 类在该数据库中创建数据库和表 这是代码 if this gt dbforge gt create database new db fields array blog id gt array
  • 对 sprintf 格式 '-Flag 的跨平台支持

    The 单一 UNIX 规范版本 2指定sprintf的格式 将行为标记为 The integer portion of the result of a decimal conversion i d u f g or G will be f
  • 通过非制表符分隔符实现非结构化 XML?

    我们有一个复杂的 XML 结构 而且非常大 gt 500 MB 该结构的XSD为 This XSD 众所周知 这是一个复杂的问题 由于大小或非制表符分隔符结构 我无法将其转换为可读性更好的演示文稿 我想通过 C 读取这个文件并搜索药物名称
  • SQL Server LAG() 函数计算行之间的差异

    我是 SQL Server 新手 对 lag 函数有一些疑问 我必须计算两个用户活动之间的平均距离 以天为单位 然后 我必须对所有用户进行分组 计算每个用户的行之间的所有日期差异 最后选择该组的平均值 Just to be clear I
  • CUDA 中的全局内存与动态全局内存分配

    我有一个 CUDA v5 5 应用程序需要使用全局内存 理想情况下 我更喜欢使用常量内存 但我已经耗尽了常量内存 溢出的内容必须放置在全局内存中 我还有一些需要偶尔写入的变量 在 GPU 上进行一些缩减操作之后 我将其放置在全局内存中 为了
  • 请求另一个域/服务器上的内容

    我正在尝试请求位于另一个域 服务器上的数据 但是当我尝试发送请求时遇到异常 var request new XMLHttpRequest request open GET http www w3schools com ajax cd cat
  • nginx proxy_pass 与socks5 代理?

    我正在尝试设置 proxy pass 同时也使用袜子5代理 我可以使用以下命令通过curl 访问我的支持服务 curl x socks5h localhost 8001 svo dev null I http abcd 1234 8000
  • 如何使用 Ruby 找到目录中最近修改的文件夹?

    如何使用 Ruby 在目录中找到最近修改的文件夹 不是文件 Dir glob a directory max by f File mtime f Dir glob a directory 返回中的所有目录名称a directory 作为字符
  • 警告消息澄清

    我在用着SNPassoc用于查找数据 SNP 和连续变量结果之间关联的 R 包 我进行了分析并得到了结果 但是 我收到警告消息 Warning in terms formula formula data data varlist has c
  • 使用 dplyr 将唯一 ID 分配给组内的不同值

    问题 我需要为具有两级分组的数据创建一个唯一的 ID 字段 在这里的示例代码中 它是Emp and Color ID 的结构需要如下 Emp 每个的唯一编号Color 重复的序列号Colors 这些值由句点分隔 示例数据 dat lt da
  • 当我使用 GZIPOutputStream 将文件发布到 servlet 时文件已损坏

    我尝试修改 BalusC优秀教程here发送 gzip 压缩文件 这是一个工作java类 import java io File import java io FileInputStream import java io FileNotFo
  • 如何在 Mercurial 队列中仅推送一个特定补丁?

    这就是我所做的 hg init hg qnew m p1 p1 patch some changes hg qrefresh hg qpop hg qnew m p2 p2 patch some changes hg qrefresh hg
  • Angular 正则表达式测试输入的 ng-pattern 验证不一致

    我对我的输入进行了 ng 模式验证 ng pattern g 这并不是每次都起作用 并表现出非常奇怪的行为 See plnkr ngMessage 仅在我输入的每两个字符上显示 但控制台正确评估正则表达式测试 我在浏览器开发工具中的 Ang
  • PHPWord 转 PDF 无法加载库

    我一整天都在努力让它发挥作用 现在我可以将文档另存为 docx 文件 但我希望能够将文档另存为 PDF 我已尝试使用 DOMPDF 和 TCPDF 但我不断收到错误 无法加载 PDF 库 我确认路径是正确的 我错过了什么吗 感谢您的帮助 r
  • 在 WPF 中加载多个图像时防止内存膨胀

    我有一个非常简单的 WPF 应用程序 用于预览任何给定文件夹中的图像 一次一张图像 您可以将其视为 Windows Image Viewer 的克隆 该应用程序有一个 PreviewKeyUp 事件 用于在按下左箭头或右箭头键时加载文件夹中
  • Jquery getJSON 无法跨站点工作

    我有一段 javascript 可以抓取 JSON 数据 当在本地执行时 一切似乎都工作正常 但是 当我尝试从其他站点访问它时 它不起作用 这是脚本 function var aT new AjaxTest aT getJson var A
  • jquery 事件处理程序相对于(内联)javascript 事件处理程序的执行顺序

    如果我错了 请纠正我 但在我看来 jQuery 事件处理与 javascript 事件处理完全分开 我知道 jQuery 和 javascript 事件处理程序本身的执行顺序是未定义的 但是是否可以假设所有 javascript 处理程序都
  • 仅执行场景大纲中的特定示例

    我们希望在 Java 测试自动化框架中使用 Cucumber 更好地管理测试数据 为一个Scenario Outline 我们希望将测试参数按其运行的适用环境进行分类 例如 Scenario Outline Login into appli
  • 执行具有多个结果集的存储过程

    我正在使用 SSIS 2016 存储过程返回 4 个结果集 只有第一个结果集是相关的 需要写入表中 我无法修改存储过程 我不关心其他结果集中返回的任何数据 存储过程位于 SQL Server 2016 数据库中 结果也将驻留在 SQL Se