SQL视图中的NULL值的常规替换

问题描述 投票:-1回答:1

我们有一个相当新的SQL Server版本,我们正在使用该版本将数据提取到SAP BW Datawarehouse中。我们正在使用视图来访问SQL Server上表中的数据。这些表中的某些字段包含NULL值。这些作为字符串值('NULL')而不是空值传输到SAP中,这使我们头疼不已。

我了解我们可以在视图中使用COALESCE()将NULL值替换为所需的默认值('',0,'1900-01-01'等),但是,对每个我们遇到的NULL字段似乎不是很聪明。

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

sql sql-server sap-bw
1个回答
0
投票

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

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

因此,唯一的选择是

  1. 仔细检查每个可能包含NULL值的字段,然后在视图中清理]
  2. 在接收时处理NULL值结束(例如SAP BW);这可以通过通用函数来完成放在入口层的启动例程中,或者可以完成手动。

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

© www.soinside.com 2019 - 2024. All rights reserved.