我的ETL中有一个包,它循环遍历4个不同的数据库,每个数据库都有一个同一个表的副本。我发现四个表中有一个有一个名为MTFvalue_Permit
的额外列,因此给出了以下错误。但是,我的事实和登台表确实包含此列。
我希望如果列不存在,ssis只会插入一个空值。如何在我的数据仓库表中为该列不存在的其他三个表添加空值?
错误:
[源DB IBS [1]]错误:SSIS错误代码DTS_E_OLEDBERROR。发生OLE DB错误。错误代码:0x80040E14。 OLE DB记录可用。来源:“Microsoft SQL Server Native Client 10.0”Hresult:0x80040E14描述:“语句无法准备。”。 OLE DB记录可用。来源:“Microsoft SQL Server Native Client 10.0”Hresult:0x80040E14描述:“无效的列名称'MTFvalue_Permit'。”。
编辑:我正在考虑为查询使用这样的case语句,但我收到了不同的错误。
SELECT
[blahblahblah] ,
[blahblahblah] ,
[blahblahblah] ,
[blahblahblah] ,
[blahblahblah] ,
CASE WHEN COL_LENGTH('wmManifests', 'MTFvalue_Permit') IS NOT NULL
THEN [MTFvalue_Permit]
ELSE NULL
END AS 'MTFvalue_Permit'
FROM dbo.wmManifests
无效的列名称“MTFvalue_Permit”。
答案 0 :(得分:0)
也许我不理解你的问题,但它接近你正在向后解决这个问题。您无法将数据插入到不存在的列中。这个列只存在于该表的四个版本中的一个中是否存在原因?此列是否具有您可以利用的默认值?
我会继续插入所有表中常见的列集,并允许表中包含每个表中不存在的列的表使用默认值那一栏。
答案 1 :(得分:0)
我不认为你可以使用表情来做到这一点。
您可以执行此解决方法。
动态构建选择查询:
如果未找到列,则传递NULL而不是列名并给出别名(与列名相同)
将此查询字符串保存到SSIS变量中并将其用作源
您还可以创建生成查询字符串的存储过程。从sql任务执行它并将查询字符串存储到ssis变量