如何在SSIS控制流任务中创建临时表,然后在数据流任务中使用它?

2023-12-01

我有一个控制流,我在其中使用 T-SQL 命令创建临时数据库和表。当我添加数据流时,我想查询该表,但我不能,因为该表不存在可从中获取信息。当我尝试时,我收到有关登录的错误,因为数据库尚不存在。我有延迟验证为真。

如果我手动创建数据库和表,然后添加带有查询的数据流并删除它会保留的数据库,但这似乎不是一个干净的解决方案。

如果有更好的方法来创建临时临时数据库并在数据流中查询它,请告诉我。


解决方案:

设置属性RetainSameConnection on the Connection Manager to True以便在一个控制流任务中创建的临时表可以保留在另一任务中。

这是一个用以下语言编写的示例 SSIS 包SSIS 2008 R2这说明了如何使用临时表。

演练:

创建一个存储过程,该过程将创建一个名为的临时表##tmpStateProvince并填充很少的记录。示例 SSIS 包将首先调用存储过程,然后获取临时表数据以将记录填充到另一个数据库表中。示例包将使用名为的数据库Sora使用下面的创建存储过程脚本。

USE Sora;
GO

CREATE PROCEDURE dbo.PopulateTempTable
AS
BEGIN
    
    SET NOCOUNT ON;

    IF OBJECT_ID('TempDB..##tmpStateProvince') IS NOT NULL
        DROP TABLE ##tmpStateProvince;

    CREATE TABLE ##tmpStateProvince
    (
            CountryCode     nvarchar(3)         NOT NULL
        ,   StateCode       nvarchar(3)         NOT NULL
        ,   Name            nvarchar(30)        NOT NULL
    );

    INSERT INTO ##tmpStateProvince 
        (CountryCode, StateCode, Name)
    VALUES
        ('CA', 'AB', 'Alberta'),
        ('US', 'CA', 'California'),
        ('DE', 'HH', 'Hamburg'),
        ('FR', '86', 'Vienne'),
        ('AU', 'SA', 'South Australia'),
        ('VI', 'VI', 'Virgin Islands');
END
GO

创建一个名为dbo.StateProvince它将用作目标表来填充临时表中的记录。使用下面的创建表脚本创建目标表。

USE Sora;
GO

CREATE TABLE dbo.StateProvince
(
        StateProvinceID int IDENTITY(1,1)   NOT NULL
    ,   CountryCode     nvarchar(3)         NOT NULL
    ,   StateCode       nvarchar(3)         NOT NULL
    ,   Name            nvarchar(30)        NOT NULL
    CONSTRAINT [PK_StateProvinceID] PRIMARY KEY CLUSTERED
        ([StateProvinceID] ASC)
) ON [PRIMARY];
GO

使用创建 SSIS 包Business Intelligence Development Studio (BIDS)。右键单击连接管理器包底部的选项卡,然后单击New OLE DB Connection...创建一个新的连接来访问SQL Server 2008 R2数据库。

Connection Managers - New OLE DB Connection

Click New... on 配置 OLE DB 连接管理器.

Configure OLE DB Connection Manager - New

在上执行以下操作连接管理器 dialog.

  • Select Native OLE DB\SQL Server Native Client 10.0 from Provider因为包将连接到SQL Server 2008 R2 数据库
  • 输入服务器名称, like MACHINENAME\INSTANCE
  • Select Use Windows Authentication from 登录服务器部分或您喜欢的部分。
  • 从以下位置选择数据库Select or enter a database name,示例使用数据库名称Sora.
  • Click Test Connection
  • Click OK on the 测试连接成功信息。
  • Click OK on 连接管理器

Connection Manager

新创建的数据连接将出现在配置 OLE DB 连接管理器. Click OK.

Configure OLE DB Connection Manager - Created

OLE DB 连接管理器KIWI\SQLSERVER2008R2.Sora将出现在连接管理器标签位于包装底部。右键单击连接管理器,然后单击Properties

Connection Manager Properties

设置属性RetainSameConnection在连接上KIWI\SQLSERVER2008R2.Sora到值True.

RetainSameConnection Property on Connection Manager

右键单击包内的任意位置,然后单击Variables查看变量窗格。创建以下变量。

  • 一个新变量名为PopulateTempTable数据类型的String在包范围内SO_5631010并设置变量的值EXEC dbo.PopulateTempTable.

  • 一个新变量名为FetchTempData数据类型的String在包范围内SO_5631010并设置变量的值SELECT CountryCode, StateCode, Name FROM ##tmpStateProvince

Variables

拖放Execute SQL Task控制流标签。双击执行SQL任务可以查看执行 SQL 任务编辑器.

On the General的页面执行 SQL 任务编辑器,执行以下操作。

  • Set the Name to Create and populate temp table
  • Set the 连接类型 to OLE DB
  • Set the 联系 to KIWI\SQLSERVER2008R2.Sora
  • Select Variable from SQL源类型
  • Select User::PopulateTempTable from 源变量
  • Click OK

Execute SQL Task Editor

拖放Data Flow Task控制流标签。将数据流任务重命名为Transfer temp data to database table。连接绿色箭头执行SQL任务 to the 数据流任务.

Control Flow Tab

双击Data Flow Task切换到数据流标签。拖放OLE DB Source数据流标签。双击OLE DB 源查看OLE DB 源编辑器.

On the Connection Manager的页面OLE DB 源编辑器,执行以下操作。

  • Select KIWI\SQLSERVER2008R2.Sora from OLE DB 连接管理器
  • Select SQL command from variable from 数据存取方式
  • Select User::FetchTempData from 变量名
  • Click Columns page

OLE DB Source Editor - Connection Manager

点击Columns页上OLE DB 源编辑器将显示以下错误,因为表##tmpStateProvince源命令中指定的变量不存在,SSIS 无法读取列定义。

Error message

要修复错误,请执行该语句EXEC dbo.PopulateTempTable using SQL Server 管理工作室 (SSMS)在数据库上Sora这样存储过程就会创建临时表。执行存储过程后,单击Columns页上OLE DB 源编辑器,您将看到列信息。点击OK.

OLE DB Source Editor - Columns

拖放OLE DB Destination数据流标签。连接绿色箭头OLE DB 源 to OLE DB 目标。双击OLE DB Destination打开OLE DB 目标编辑器.

On the Connection Manager的页面OLE DB 目标编辑器,执行以下操作。

  • Select KIWI\SQLSERVER2008R2.Sora from OLE DB 连接管理器
  • Select Table or view - fast load from 数据存取方式
  • Select [dbo].[StateProvince] from Name表或视图的
  • Click Mappings page

OLE DB Destination Editor - Connection Manager

Click Mappings页面上的OLE DB 目标编辑器如果输入和输出列名称相同,将自动映射列。点击OK。柱子StateProvinceID没有匹配的输入列,它被定义为IDENTITY数据库中的列。因此,不需要映射。

OLE DB Destination Editor - Mappings

数据流配置完所有组件后,选项卡应如下所示。

Data Flow tab

点击OLE DB Source on 数据流选项卡并按下F4查看Properties。设置属性ValidateExternalMetadata设置为 False,以便 SSIS 在包执行的验证阶段不会尝试检查临时表是否存在。

Set ValidateExternalMetadata

执行查询select * from dbo.StateProvince in the SQL Server 管理工作室 (SSMS)查找表中的行数。在执行包之前它应该是空的。

Rows in table before package execution

执行包。控制流显示执行成功。

Package Execution  - Control Flow tab

在“数据流”选项卡中,您会注意到包已成功处理6行。插入此帖子早期创建的存储过程6行存入临时表。

Package Execution  - Data Flow tab

执行查询select * from dbo.StateProvince in the SQL Server 管理工作室 (SSMS)找到6行已成功插入表中。数据应与存储过程中找到的行匹配。

Rows in table after package execution

上面的示例说明了如何在包中创建和使用临时表。

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

如何在SSIS控制流任务中创建临时表,然后在数据流任务中使用它? 的相关文章

  • SQL Server 查询返回多行

    我目前正在开发一个 SSIS 包 该包将表从一个数据库提取到另一个数据库 两个数据库中的表都使用同一列作为主键 我提取数据的 select 语句是一个简单的 select 语句 当我运行该包时 我收到一条错误 指出存在重复的主键值 我检查了
  • SSIS 与 DTS 性能

    这么晚了才这么做似乎很疯狂 但是 我正在使用 Rocket Software UniVerse 源和 SQL 目标重建一些 ETL 基础设施 旧的目标平台是 Windows Server 2003 上的 SQL 2000 新平台是 Wind
  • 如何将 FTP 目录的内容复制到共享网络路径?

    我需要将 FTP 位置上的目录的全部内容复制到共享网络位置 FTP 任务要求您指定确切的文件名 不是目录 而文件系统任务不允许访问 FTP 位置 EDIT 我最终编写了一个脚本任务 没有什么比恢复一个非常旧的线程更好的了 但是有一个解决方案
  • SSDT-BI 可以与 SQL Server 2008 R2 一起使用吗?

    有人可以告诉我在 Visual Studio 2012 或 2013 中开发的 SSIS 包是否可以在 2008r2 服务器上运行吗 如果是 2008r2服务器上还需要安装其他软件吗 这里不关心部署 我只想通过 sql 代理作业在 2008
  • SSIS ODBC SQL 参数

    我在 odbc 源数据流任务中有一个 SQL 命令需要采用参数 但不存在添加参数的选项 我尝试将数据库添加为与 ODBC 提供程序的 ADO NET 连接 但也没有可用的参数 还尝试将其作为 OLEDB 连接 但没有可用于 ODBC 的提供
  • 如何在 SQL Server Management Studio 中查看 SSIS 包?

    啊 我通过导入向导创建了 SSIS 包 但使用 Management Studio 在服务器上找不到 SSIS 包 当我进入作业调度程序时 执行 SSIS 包也没有显示为选项 当您启动 SSMS 时 它允许您选择服务器类型和服务器名称 在服
  • 如何查询集成服务目录

    问题 识别连接到 SQL Server 上特定数据库表的所有 SSIS 包 详细信息 服务器上部署了近 100 个包 大多数包的大小都很大 因此很难以高精度手动检查它们 有没有一种快速且自动化的方法来做到这一点 使用 SQL Server
  • SSIS 包在 sql server 代理中失败,但在 Visual Studio 中失败。 ODBC 连接

    我有一个 SSIS 包 在 Visual Studio 2010 中运行良好 但作为 SQL Server 的一项作业 它在连接到 ODBC 数据库时失败 该项目使用密码对敏感数据进行加密 这是因为代理服务器不是我的帐户 也恰好是使用连接字
  • 生成脚本 - 仅数据 - 循环依赖项发现错误

    我正在尝试生成数据库中所有数据的脚本 以便我可以将数据移动到另一台服务器上的相同数据库 在 SQL Server 2012 中 我右键单击源数据库 任务 gt 生成脚本 gt 为整个数据库和所有数据库对象编写脚本 gt 高级 gt 要编写脚
  • 脚本任务无法在 Visual Studio 2013 中打开编辑器

    我正在使用 SSIS 2014 和 Visual Studio 2013 当我单击脚本任务的 编辑脚本 按钮时 没有错误 没有任何反应 但脚本编辑器没有打开 我在我的机器上安装后什么也没发生 Microsoft Visual Studio
  • SSIS Master 包执行来自另一个项目的包

    我有多个SSIS项目 但其中的一些包是相同的 我想创建一个包含所有内容的项目generic包并将其他项目与他们的特定包一起保存 所以我的问题是 是否有可能有一个主包可以执行并将父变量传递给另一个项目的包 我是 SSIS 新手 如果这是一个明
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • 打开脚本任务时 SSIS 丢失文件引用

    我们使用自定义审核程序集 C 在脚本任务中记录 SSIS 中的多种操作 我们将在 GAC 中构建自定义程序集 用于运行时 并发布到 IDE VS2008 的公共程序集区域以供设计时文件引用 后构建完成后 自定义程序集可在运行时使用 并可在文
  • SSIS 将字符转换为布尔值/位

    我有一个SSIS包来加载数据 您可能还记得 当我尝试将数据文件中的标志作为位标志加载到 SQL Server 中时 这些标志作为 Y N char 1 存在 我将数据文件中的列指定为String DT STR 我有一个数据转换任务 根据以下
  • SSIS-从 Sharepoint 下载 Excel 并将其加载到 SQL 数据库

    我目前遇到的情况是共享点网站上有一个 Excel 文件 我需要将该 Excel 文件加载到数据库中 Excel 文件有多个工作表 我尝试过以下方法 但运气为零 方法 1 我访问 sharepoint 站点并访问 库 选项卡 并选择使用资源管
  • 使用 dtexec 运行 SSIS 包

    我正在使用 dtexec 运行 SSIS 包 该软件包在我的系统上的 BIDS 中运行良好 当我创建 SQL Server 代理作业以按计划运行包时 包运行步骤被安排为 T SQL 任务 而不是 SSIS 包 该作业没有报告错误 但它甚至没
  • 年函数不支持 dt_wstr

    我无法使用下面的代码应用转换 出现错误 年函数不支持 dt wstr 我使用的表达式是 DT I4 DT WSTR 4 YEAR fisc wk end dt RIGHT 0 DT WSTR 2 MONTH fisc wk end dt 2
  • SSIS 2008 和 Undouble

    我将 SSIS 与 SQL Server 2008 R2 一起使用 我正在导入大型文本文件 大约 0 5 GB 这些文件使用双引号作为文本限定符 使用逗号作为字段分隔符 许多文件都具有文本限定字段 并在终止双引号之间包含逗号 SSIS 应该
  • ssis将N个表从源服务器加载到目标服务器的最佳实践

    我需要将 N 个 大约 50 个 表从源数据库加载到目标数据库 每个表都与其他表不同 因此元数据不同 我想我可以使用父 pkg 来调用子 pkg 其中每个子 pkg 都有简单的结构 例如 DFT 来映射要导入的表 1 个子 pkg gt 1
  • 无法在 SSIS 查找中选择 ODBC 源

    我正在创建一个用于更新 SQL Server 中的表的包 要更新的详细信息是从 MySQL 数据库获取的 为此 我使用 ODBC 连接管理器连接到 MySQL 但此 ODBC 连接管理器未在 OLE DB 连接管理器中列出 我可以在 Too

随机推荐

  • 有谁能够让肥皂库与 NetSuite WSDL 一起使用吗?

    有谁能够让肥皂库与 NetSuite WSDL 一起使用吗 当我尝试创建客户端时出现此错误 from suds client import Client url http mssoapinterop org asmx simple asmx
  • 在 Node 服务器上运行 Matter.js

    我正在尝试运行一个在服务器上运行物理模拟的服务器 并让客户端通过 websockets socket io 连接到该服务器 我知道我可以使用 Matter js 与渲染分开计算引擎 所以我的问题是 如何将引擎数据发送给客户端 我有一个Gam
  • 如何根据用户的不同让我的机器人在不同的对话框中启动

    基本上 我希望使用 iframe 和 Bot Framework Web Chat 将我的机器人放在不同的页面上 根据用户打开机器人的页面 会调用不同的对话框 如果没有 Direct Line 这就像向 api messages 添加查询参
  • Android AudioRecord 初始化失败

    我在使用 Android 版 AudioRecord 时遇到问题 我已经在网上阅读了尽可能多的内容 但我似乎无法获得良好的初始化 我尝试过 Android 2 2 模拟器 1 5 模拟器和我的手机 运行 Froyo 的 HTC Incred
  • 如何在 C# 中以编程方式启用强大的私钥保护?

    使用 C 以编程方式添加 X509Certificate2 时 如何实现相当于在 certmgr msc 中设置 强私钥保护 复选框的效果 您必须设置X509KeyStorageFlags相应地 当导入证书 i e MachineKeySe
  • 限制某些 iOS 目标设备进行 App Store 提交

    由于在 iPhone 4 硬件上运行出现问题 我的 iTunes App Store 提交被退回 基本上 该应用程序的编写目的是将所有网络活动转移到后台线程 以便 UI 在等待服务器响应慢速 蜂窝 数据连接时不会锁定 这在 iPad 2 i
  • 我应该始终使用视图模型还是可以使用 ViewData?

    您认为什么时候使用 ViewData 比视图模型更好 我在几个主要视图中有完全相同的部分视图 我想控制部分视图的呈现方式 但我也更喜欢部分视图只接受视图模型 该视图模型是记录的集合 只是一个纯粹的IEnumerable lt gt 目的 我
  • C 指针语法

    这两行代码有什么区别呢 int ptr x and void q x int p q 我对 C 和指针的概念非常陌生 主要是在 Java 中教授的 所以有点困惑 提前致谢 void 用于表示 C 中的通用指针 这意味着它可以指向任何类型 所
  • Windows下在Eclipse SWT中使用64位XulRunner

    是否可以使用 64 位 XulRunner for Windows 可以从这里获得 与 Eclipse 浏览器小部件 它在 32 位 Windows 下运行良好 答案是这个问题解释了这是如何工作的 但是当我在 64 位 Windows 下尝
  • R h2o 服务器 CURL 错误,有点可重复

    起初我以为这是一个随机问题 但重新运行脚本又发生了 Error in h2o doSafeREST h2oRestApiVersion h2oRestApiVersion urlSuffix urlSuffix Unexpected CUR
  • 如何在我的导航栏中将“nav”元素移动到“navbar-brand”下

    I using Bootstrap 4 and I set navbar brand to the center and all elements to the right side I want to set my nav element
  • 网页抓取视频

    我正在尝试通过下载 Bob s Burgers 的电视剧集来进行概念验证https www watchcartoononline com bobs burgers season 9 episode 3 tweentrepreneurs 我不
  • 使用 Apache POI 在 Excel 中创建条形图

    我正在尝试使用 Apache POI 在 XLSX 电子表格中创建条形图 但 Excel 一直提示内容有问题 并在我尝试打开文件时删除图表 这是我想要做的完整代码 public static void createBarChart Work
  • 如何允许我网站上的访问者在他们的 Facebook 新闻源上分享我的照片?

    如何允许我网站上的访问者在他们的 Facebook 墙 新闻源上分享我的照片 我看到 Facebook 有一个 分享 或 喜欢 选项 但似乎分享了整个页面 我希望每张图片旁边都有一个 Facebook 小图标 当他们单击它时 该特定图像只会
  • Android 5 Lollipop 中通知栏图标变白

    我有一个显示自定义通知的应用程序 问题是 在 Android 5 中运行时 通知栏中的小图标显示为白色 我怎样才能解决这个问题 接受的答案并不 完全 正确 当然 它使通知图标以颜色显示 但这样做有一个很大的缺点 将目标 SDK 设置为低于
  • Facebook-connect 提供重定向循环

    拜托 我需要帮助 我处理这个问题1个月了 我想使用 PHP 和 php sdk 3 1 1 实现 facebook 连接登录到我的网站 简而言之 我的代码可以离线工作 在本地主机上 但不能在线工作 这会导致 重定向循环太多 在 Chrome
  • 如何很好地处理[:-0]切片?

    在实现自相关函数时 我有一个像这样的术语 for k in range start N c k np sum f k f k N k 现在一切正常如果start 1但我想很好地处理开始0没有条件的情况 显然它不起作用 因为f 0 f 0 并
  • Linux 内核中哪里可以找到 TCP 数据(HTTP 下)?

    我正在尝试使用Linux内核中的TCP从HTTP流中读取数据 我能够从中获取大部分数据skb buff here 但是 如果服务器在没有请求的情况下将数据推送到客户端 则数据不会复制到用户空间 这样我就找不到它了 使用 Wireshark
  • 自定义订单排序

    您好 我想根据值 关键 高 中 低 对整个 C 列进行排序 我正在启用宏的工作表上运行此代码 这是我的代码 Sub run Range C C Sort Key1 Range C1 SortOn xlSortOnValues Order x
  • 如何在SSIS控制流任务中创建临时表,然后在数据流任务中使用它?

    我有一个控制流 我在其中使用 T SQL 命令创建临时数据库和表 当我添加数据流时 我想查询该表 但我不能 因为该表不存在可从中获取信息 当我尝试时 我收到有关登录的错误 因为数据库尚不存在 我有延迟验证为真 如果我手动创建数据库和表 然后