如果列不存在,如何添加空值

时间:2016-11-23 15:48:22

标签: sql-server ssis etl bids

我的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”。

2 个答案:

答案 0 :(得分:0)

也许我不理解你的问题,但它接近你正在向后解决这个问题。您无法将数据插入到不存在的列中。这个列只存在于该表的四个版本中的一个中是否存在原因?此列是否具有您可以利用的默认值?

我会继续插入所有表中常见的列集,并允许表中包含每个表中不存在的列的表使用默认值那一栏。

答案 1 :(得分:0)

我不认为你可以使用表情来做到这一点。

您可以执行此解决方法。

  • 添加列出表格列
  • 的脚本任务
  • 动态构建选择查询:

    如果未找到列,则传递NULL而不是列名并给出别名(与列名相同)

  • 将此查询字符串保存到SSIS变量中并将其用作源

您还可以创建生成查询字符串的存储过程。从sql任务执行它并将查询字符串存储到ssis变量