我们如何在HANA中实现结果中每一行的功能执行?

2020-08-23 21:32发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好


我们正在将我们的MS SQL查询迁移到B1的HANA,我们陷入了一个关键问题。 我们在MS SQL中广泛使用了内联表值函数,以便我们可以有效地重用我们的代码。 例如

创建函数[dbo]。[UDF_AddressFormat](@ Street VARCHAR(50),@ Block VARCHAR(50))
 以RETURNS表的形式返回(选择CONCAT(@Street,",",@Block)AS [地址])

我们在各种过程和其他功能中使用它的方式是:

选择T0.CardCode,T0.CardName,(从[dbo]中选择地址。[UDF_AddressFormat](T1.Street,T1.Block))AS'BillToAddressString'

 从OCRD T0内联接CRD1 T1到T0.CardCode = T1.CardCode AND T0.BillToDef = T1.Address AND T1.AdresType ='B'

这在MS SQL中效果很好。 但是我们无法在HANA中复制此功能。

我们尝试在HANA中创建表函数,但是当我们如上所述在HANA中执行最终查询时,出现错误:

功能不支持:字段或表别名不能作为表函数的输入

我什至在寻找OUTER APPLY运算符来实现这一目标,但HANA似乎也不支持。

有人可以建议前进的方向或其他功能吗? 我们在哪里出错了?

注意:我们在函数中的操作要比这复杂得多。 简单的表值函数用于演示目的,并使其更易于理解。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好


我们正在将我们的MS SQL查询迁移到B1的HANA,我们陷入了一个关键问题。 我们在MS SQL中广泛使用了内联表值函数,以便我们可以有效地重用我们的代码。 例如

创建函数[dbo]。[UDF_AddressFormat](@ Street VARCHAR(50),@ Block VARCHAR(50))
 以RETURNS表的形式返回(选择CONCAT(@Street,",",@Block)AS [地址])

我们在各种过程和其他功能中使用它的方式是:

选择T0.CardCode,T0.CardName,(从[dbo]中选择地址。[UDF_AddressFormat](T1.Street,T1.Block))AS'BillToAddressString'

 从OCRD T0内联接CRD1 T1到T0.CardCode = T1.CardCode AND T0.BillToDef = T1.Address AND T1.AdresType ='B'

这在MS SQL中效果很好。 但是我们无法在HANA中复制此功能。

我们尝试在HANA中创建表函数,但是当我们如上所述在HANA中执行最终查询时,出现错误:

功能不支持:字段或表别名不能作为表函数的输入

我什至在寻找OUTER APPLY运算符来实现这一目标,但HANA似乎也不支持。

有人可以建议前进的方向或其他功能吗? 我们在哪里出错了?

注意:我们在函数中的操作要比这复杂得多。 简单的表值函数用于演示目的,并使其更易于理解。

付费偷看设置
发送
6条回答
渐行渐远_HoldOn
1楼-- · 2020-08-23 22:14

也许您可以向我们展示您的HANA表函数和您要尝试执行的查询。

并且您可以在查询的字段列表中使用标量函数。

当学会了学习
2楼-- · 2020-08-23 22:16

该函数中有一个更正:

(SELECT CONCAT(@Street,'-',@Block)AS [地址])

木偶小白
3楼-- · 2020-08-23 22:29

仅在from子句中不能在查询的字段列表中使用表函数 。 因此,您可以创建标量函数或针对特定情况直接使用串联运算符(" ||"),也可以使用 CONCAT 函数(例如... CONCAT(T1。" STREET",CONCAT('-',T1。" BLOCK"))...)

一只江湖小虾
4楼-- · 2020-08-23 22:21

我创建的HANA表函数是:

创建函数xyz.AddressFormat(在街道VARCHAR(50)中,在块VARCHAR(50)中)
返回表(地址VARCHAR(2000))
语言SQLSCRIPT
开始
RETURN < br> SELECT:街道|| '-'|| :块AS地址
FROM xyz.OADM;
END

xyz是架构。

我正在按以下方式使用此功能:

 SELECT 
T0。" CardCode",T0。" CardName",
(从xyz.AddressFormat(T1。" Street",T1。" Block")中选择地址)AS" BillToAddressString"

FROM
xyz.OCRD T0内连接xyz.CRD1 T1在T0上。" CardCode" = T1。" CardCode" AND T0。" BillToDef" = T1。"地址" AND T1。" AdresType" ='B '

使用此方法时,出现以下错误:
功能不受支持:字段或表别名不能用作表函数的输入


我没有考虑使用标量函数,因为我读到标量UDF对SQL的性能非常不利。 这就是为什么我们坚持使用嵌入式TVF。

Aaron 3364
5楼-- · 2020-08-23 22:03

我在问题的注释中添加了HANA代码。

能不能别闹
6楼-- · 2020-08-23 22:13

再次: 表函数不能在查询的字段列表中使用! 如果需要并且需要使用表函数,则必须在表函数中实现整个逻辑,并在查询的from子句中使用它。

一周热门 更多>