在SSIS中的不同组件间使用局部临时表

Connetion的属性RetainSameConnection是个boolean值,指定是否保持相同的链接,默认值是false,表示每个component都会单独的使用connection,在component开始时打开connection,在component结束时关闭connection。不同的componet之间使用的是不同的connection。

由于局部临时表的生命周期是在当前连接,在链接关闭时就会终止,临时表就不存在了。在SSIS中不同组件间使用临时表,需要设置Connetion的属性RetainSameConnection=true,这样所有的task,component都会使用同一个连接。临时表的生命周期扩展到不同的componet,task中。

示例,在不同的componet,task中使用临时表

1,设计control flow

TaskCreate Temporary Table的sql语句

if object_id(‘tempdb..#dt_temporary‘) is not null
drop table #dt_temporary

create table #dt_temporary
(
id int
)

Task exec sql statement的sql 语句

insert into #dt_temporary
values(1)

Task Insert into dt_test的sql 语句

insert into dbo.dt_test(id)
select id
from #dt_temporary

Task drop temporary table的sql 语句

drop table #dt_temporary

2,设置Connetion的属性RetainSameConnection=true

3,执行package,查看结果

4,如果设置Connetion的属性RetainSameConnection=false,在执行package时,会出现错误,

[Execute SQL Task] Error: Executing the query "
insert into #dt_temporary
values(1)" failed with the following error: "Invalid object name ‘#dt_temporary‘.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

错误原因,上面已经解释清楚:由于Task Create temporary table结束时,其链接关闭,导致创建的临时表生命周期结束,临时表被sql server 销毁。在Task Exec sql statement 中,重新打开链接,不能使用不存在的临时表,所以报错"Invalid object name ‘#dt_temporary‘.".

5,在task中声明的sql 变量,不能在task之间使用,因为sql变量的生命周期是在current batch,而不是connection。每一个task执行的都是一个batch。batch结束,sql变量生命周期就结束。

在 SSMS中,go 语句标识一个batch的结束,下面的语句执行时会报错,就是因为sql 变量的生命周期是在一个batch内。

而局部临时表的生命周期是在一个connection中,在当前connection结束时,临时表的生命周期才会终止。

时间: 2024-07-30 06:43:06

在SSIS中的不同组件间使用局部临时表的相关文章

SSIS中执行SQL任务组件参数传递的问题

原文:SSIS中执行SQL任务组件参数传递的问题 症状: 执行SQL任务,传递参数到子查询中,执行报错. 错误: 失败,错误如下:"无法从使用 sub-select 查询的 SQL 语句中派生出参数信息.请在准备命令之前设置参数信息.".失败的原因可能有: 查询本身有问题.未正确设置 "ResultSet" 属性.未正确设置参数或未正确建立连接. 原因: 在 OLE DB 连接管理器中使用参数 如果执行 SQL 任务使用 OLE DB 连接管理器,则该任务的 Byp

微软 BI ssis 中的 script task中用代码直接调用 WCF / Webservice

背景: 在普通的C#项目中,可以直接调用 WCF / Webservice: 在微软BI的 ssis中,有 webservice任务组件,也可以直接调用简单的 WCF / Webservice; 偶这边的情况是,后端的 WCF中用的反射,所以在 ssis中的webservice任务组件中,死活不能识别 WCF对应的方法. 所以只能在ssis的 script task组件中,用纯代码的方式来调用WCF服务. 就这样,可能还是有问题:可能会碰到 不能识别 System.ServiceModel节点的

使用SSIS Slow Changing Transformation组件管理缓慢变化维

最近尝试用SSIS自带的 Slow Changing Transformation组件处理缓慢变化维,看到有一篇文章写的很详细,就按照步骤进行操作同时进行翻译.原网址来自:Managing Slowly Changing Dimension with Slow Changing Transformation in SSIS. 介绍 作为数据库专家或者ETL的开发者你可能偶尔会碰到需要维护和管理缓慢变化唯的场景.在SQL Server中有多种方法来实现,最简单的是使用SSIS 数据流组件中的Slo

Titanium中调用ios组件时语言不是本地化的解决方法

用Titanium开发的ios应用中,当调用系统组件时,尽管手机已经设置了系统语言为中文,但那些组件的界面却仍为英文.比如调用iphone中的相册组件,其界面为: 那么怎么让它跟系统语言保持一致呢? 在原生的ios开发中,只需要在info.plist中把 CFBundleAllowMixedLocalizations 设置为 true 就行了,代表Localized resources can be mixed,就是允许库使用本地语言资源. 那么在Titanium中该怎么做呢? 其实也很简单,T

微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使用文件形式存储.在国内大量使用 ACCESS 作为 BI 数据源并不多,但是在国外特别是美国使用的还比较多,因为他们的 IT 基础起步比较早.在我的第一个美国的医疗保险项目中,就遇到过大量的 ACCESS 数据源,前后总共有 500 多个 ACCESS 表.而现在从国外一些朋友反馈的情况仍然还有在使

UIRect中的Anchor组件

[UIRect中的Anchor组件] Anchor用于实现粘着功能,寄存于UIRect类中.Anchor的类型有三种: 1.None:不使用跟随功能. 2.Unified:四条边使用相同的Target. 3.Advanced:四条边分别拥有各自的Target. 在Anchor的系统中,一个Rect被拆分为四条边,left.right.top.bottom.right-left=width.bottom-top=heigth.设置四条边,则UIWidget中的宽高会自动改变,反之亦然. Unifi

iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯

本文转载至 http://blog.csdn.net/remote_roamer/article/details/7261490 WebViewJavascriptBridge 项目的 官网 https://github.com/marcuswestin/WebViewJavascriptBridge 主要过程: 下载WebViewJavascriptBridge.h 和 WebViewJavascriptBridge.m文件到自己的项目中,并添加到项目. 在相应的.h文件中 使用#import

在JS中使用COM组件的方法

首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: STDMETHODIMP Ctest::test(void) //无输入输出参数 { // TODO: 在此添加实现代码 MessageBox(NULL,L"test",L"test",MB_OK); return S_OK; } STDMETHODIMP Ctest::test1(BSTR a1) //有一个字符串输入参数 { // TODO: 在此添加实现代码 MessageBox(

Bootstrap 中的 Typeahead 组件 -- AutoComplete

Bootstrap 中的 Typeahead 组件就是通常所说的自动完成 AutoComplete,功能很强大,但是,使用上并不太方便.这里我们将介绍一下这个组件的使用. 第一,简单使用 首先,最简单的使用方式,就是直接在标记中声明,通过 data-provide="typeahead" 来声明这是一个 typeahead 组件,通过 data-source= 来提供数据.当然了,你还必须提供 bootstrap-typeahead.js 脚本. <html> <he