-1

我们有一个相当新的 SQL Server 版本,用于将数据提取到SAP BW Datawarehouse中。我们使用视图来访问 SQL 服务器上表中的数据。这些表中的某些字段包含 NULL 值。这些以字符串值('NULL')而不是空的形式传输到 SAP 中,这让我们非常头疼。

我知道我们可以在视图中使用COALESCE()将 NULL 值替换为所需的默认值(''、0、'1900-01-01' 等),但是,对我们遇到的每个 NULL 字段执行此操作不会看起来不是很聪明。

除了将表更改为不允许 NULL 值之外,是否有更好的方法来解决此问题?是否可以包含一个自定义全局函数,该函数会自动应用于视图中获取的所有字段,而我们不必为每个字段单独调用此函数?

4

1 回答 1

0

@Jeroen Mostert 在评论中的回答回答了我的问题。

没有全局切换、标志或设置可以神奇地 为您消除 NULL。最接近的是 COALESCE(, '') 对于几乎所有类型(包括 DATETIME)都会“工作”(对于“工作”的某些值),但 DECIMAL 除外。您不能编写函数来执行此操作,因为 T-SQL 中的函数无法根据输入返回不同的类型。到目前为止,最好的“修复”确实是修复处理步骤,如果只是因为在您的数据库中以 1900-01-01 日期结束通常是非常不可取的。

因此,唯一的选择是

  1. 遍历每个可能包含 NULL 值的字段并在视图中清理它
  2. 在接收端处理 NULL 值(例如 SAP BW);这可以通过放置在入口层的启动例程中的通用函数来完成,也可以手动完成。

在这种情况下,在源系统中禁止表级别的 NULL 值是不可行的,因为我们无法更改写入表的应用程序(第三方供应商 ERP)。

于 2020-02-19T13:04:37.900 回答