如果列不存在,如何添加空值
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 变量
我的 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 变量