一般替换 SQL 视图中的 NULL 值
General replacing of NULL values in SQL Views
我们有一个相当新的 SQL 服务器版本,我们用它来将数据提取到 SAP BW 数据仓库 。我们正在使用视图访问 SQL 服务器上表中的数据。这些表中的某些字段包含 NULL 值。这些以字符串值 ('NULL') 而不是空值的形式传输到 SAP,这让我们非常头疼。
我知道我们可以在视图中使用 COALESCE() 将 NULL 值替换为所需的默认值(''、0、'1900-01-01' 等.),但是,对我们遇到的每个 NULL 字段执行此操作似乎不是很聪明。
除了更改表以不允许 NULL 值外,是否有更好的方法来解决此问题?是否可以包含一个自定义全局函数,该函数会自动应用于视图中获取的所有字段,而无需为每个字段单独调用此函数?
@Jeroen Mostert 在评论中的回答回答了我的问题。
There is no global toggle, flag or setting that will magically
eliminate NULLs for you. The closest thing is that COALESCE(,
'') will "work" (for some values of "work") for almost every type
(including DATETIME), with the notable exception of DECIMAL. You
cannot write a function to do this, as functions in T-SQL cannot
return different types based on their input. By far the best "fix" is
indeed to fix the processing step, if only because ending up with
1900-01-01 dates in your database is typically quite undesirable.
因此,唯一的选择是
- 遍历每个可能包含 NULL 值的字段,然后
在视图中清理它
- 在接收时处理 NULL 值
结束(例如 SAP BW);这可以通过一个通用函数来完成
放在入口层的启动例程中或者可以完成
手动。
在这种情况下,在源系统的 table 级别上不允许 NULL 值是不可行的,因为我们无法更改写入 table 的应用程序(第三方供应商 ERP)。
我们有一个相当新的 SQL 服务器版本,我们用它来将数据提取到 SAP BW 数据仓库 。我们正在使用视图访问 SQL 服务器上表中的数据。这些表中的某些字段包含 NULL 值。这些以字符串值 ('NULL') 而不是空值的形式传输到 SAP,这让我们非常头疼。
我知道我们可以在视图中使用 COALESCE() 将 NULL 值替换为所需的默认值(''、0、'1900-01-01' 等.),但是,对我们遇到的每个 NULL 字段执行此操作似乎不是很聪明。
除了更改表以不允许 NULL 值外,是否有更好的方法来解决此问题?是否可以包含一个自定义全局函数,该函数会自动应用于视图中获取的所有字段,而无需为每个字段单独调用此函数?
@Jeroen Mostert 在评论中的回答回答了我的问题。
There is no global toggle, flag or setting that will magically eliminate NULLs for you. The closest thing is that COALESCE(, '') will "work" (for some values of "work") for almost every type (including DATETIME), with the notable exception of DECIMAL. You cannot write a function to do this, as functions in T-SQL cannot return different types based on their input. By far the best "fix" is indeed to fix the processing step, if only because ending up with 1900-01-01 dates in your database is typically quite undesirable.
因此,唯一的选择是
- 遍历每个可能包含 NULL 值的字段,然后 在视图中清理它
- 在接收时处理 NULL 值 结束(例如 SAP BW);这可以通过一个通用函数来完成 放在入口层的启动例程中或者可以完成 手动。
在这种情况下,在源系统的 table 级别上不允许 NULL 值是不可行的,因为我们无法更改写入 table 的应用程序(第三方供应商 ERP)。