【问题标题】:How do I work with table variables with multiple rows in SAP HANA DB?如何在 SAP HANA DB 中处理具有多行的表变量?
【发布时间】:2020-03-26 18:03:53
【问题描述】:

在 SQL 中,有时使用表变量更容易、更快捷。

我知道我不能在 HANA DB 中使用 insert to table var,但是做类似事情的最佳做法是什么?

我尝试使用 SELECT 填充变量,但无法插入多行。

我必须改用临时表吗?

我想要一个包含我创建的一些值的表,例如我用于 SQL 的以下示例,这样我可以稍后在查询中使用它:

Declare @temp table(Group Int, Desc nvarchar(100))
    insert into @temp (Group , Desc )
        Values (1,'Desc 1'), (2,'Desc2 2'),  (3,'Desc 3'),  (4,'Desc 4'),  (5,'Desc 5')

在 HANA 中,我可以创建变量,但不能用多行填充它:(

有什么最好的方法吗?

非常感谢。

【问题讨论】:

标签: sql sap hana


【解决方案1】:

“UNION”方法是将记录添加到表变量指向的数据中的一种选择。

比这更好的是要么使用 arrays 来添加、删除和修改数据,最后通过 UNNEST 函数将数组转换为表变量。这是一个已经存在多年的选项,即使是使用 HANA 1。

另外,SAP HANA 2(我相信从 SPS 03 开始​​)提供额外的 SQLScript 命令,直接在表变量上使用INSERTUPDATEDELETE。文档在"Modifying the Content of Table Variables" 中对此进行了介绍。 请注意,此功能附带的 DML 命令语法略有不同。

从 SAP HANA 2 SPS 04 开始,为此提供了另一个语法选项: “SQL DML Statements on Table Variables”。 最后,这个看起来像针对表变量的“普通”SQL DML。

鉴于这些选项,“联合”方法是您应该在编码中使用的最后一个选项。

【讨论】:

  • 谢谢!我尝试使用您发送的文档中的一些信息,但就我而言,SAP Hana 版本有点旧,1.X 版本。因此,我正在尝试使用过程并使用 FOR 结构将数据插入到表变量中。因为我选择了许多不同的数据并将其插入到另一个表中,所以我可以比较它。
【解决方案2】:

对于其他试图找到它的人,我找到了一个“解决方法”,即使用 UNION ALL。

我添加第一行,然后在表格上执行 UNION 并添加第二行,如下所示:

tempTable = Select 1 as "Group", 'Desc' as "Desc" FROM DUMMY;
tempTable = SELECT "Group", "Desc" FROM :AcctClassificacao UNION ALL Select 2 as "Group",
            'Desc' as "Desc" FROM DUMMY ;

Select * from tempTable

在这种情况下,我会得到结果:

Group   Desc
  1     Desc
  2     Desc

我不知道这是否是最好的方法。

【讨论】:

  • 是的,这不是一个好的“解决方法”——它基本上忽略了已经存在多年的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2018-09-15
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多