如何用SSIS实现源到临时表再到永久表的数据加载及解决表不存在问题
解决SSIS中设计时无法选择动态创建的临时表问题
给你几个实用的解决办法:
方法1:提前手动创建临时表(设计时占位)
在服务器2的目标数据库里,先手动执行一遍创建xTabKey的SQL语句,让设计阶段能识别到这个表:
if object_id('xTabKey', 'U') is not null drop table xTabKey select top 0 * into xTabKey from dbo.rTabKey
回到SSIS的Data Flow Task里,就能直接在OLEDB目标的表列表里选到xTabKey了。包运行时,Execute SQL Task会重新执行删表建表的逻辑,完全不影响运行,设计时只是用这个表来获取元数据而已。
方法2:OLEDB目标改用SQL命令模式
不用纠结选表的问题,直接在OLEDB目标的「数据访问模式」里选「SQL命令」,然后写插入语句:
INSERT INTO xTabKey (列名1, 列名2, ...) VALUES (?, ?, ...)
注意列名要和源表的列一一对应,问号是参数占位符。接着点「参数映射」按钮,把Data Flow里的源列和SQL语句的参数对应好就行。这种方式不需要设计时存在目标表,只要运行时Execute SQL Task已经把表建好就没问题。
方法3:开启延迟验证
选中你的Data Flow Task,在属性窗口里找到DelayValidation属性,改成True;同时把OLEDB目标的ValidateExternalMetadata属性也设为False。这样SSIS在设计阶段不会去验证目标表是否存在,只会在运行时做校验,只要Execute SQL Task的执行顺序在Data Flow Task之前,运行时表已经创建,就能正常加载数据。
内容的提问来源于stack exchange,提问作者Nish
相关产品推荐
相关产品推荐

