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

How to add null value if a column doesn't exist

我的 ETL 中有一个包循环遍历 4 个不同的数据库,每个数据库都有相同 table 的副本。我发现四个 table 之一有一个名为 MTFvalue_Permit 的额外列,因此出现以下错误。然而,我的事实和分期 tables 确实包含此专栏。

我希望 ssis 在该列不存在时插入一个空值。我如何将空值添加到我的数据仓库 table 中,以便其他三个 table 中不存在此列?

错误:

[Source DB IBS [1]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E14. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E14 Description: "Statement(s) could not be prepared.". An OLE DB record is available. Source: "Microsoft SQL Server Native Client 10.0" Hresult: 0x80040E14 Description: "Invalid column name '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

Invalid column name 'MTFvalue_Permit'.

也许我不理解你的问题,但你似乎在倒退着解决这个问题。您不能将数据插入到不存在的列中。此列仅存在于此 table 的四个版本中的一个中,这是有原因的吗?此列是否有您可以利用的默认值?

我将继续插入 所有 table 中常见的列集,并允许 table 包含不存在的列在集合中的每个 table 中使用该列的默认值。

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

您可以执行此解决方法。

  • 添加一个脚本任务,列出 table
  • 中的列
  • 动态构建 Select 查询:

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

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

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