SAP HANA XSA SPS 3:序列行为(hdbsequence)

2020-08-30 19:03发布

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

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


专家们,

我们对序列(.hdbsequence)的行为感到有些惊讶。

如果我们首先通过sql插入更高的ID(5),我们试图找出序列的工作方式。 我们认为自动增量将在5点后开始,但事实并非如此。 它从1开始。

序列" TBASE.db.sequences :: A_DialyseID"
 通过选择IFNULL(MAX(" DialyseID"),0)+1从" TBASE.db.data::tbase.cds.md.A_Dialyse"重置

此后,我们尝试找出序列到ID 5时的计数方式,并意识到序列运行出错并停止了自动递增。

要解决此问题,我们想使用"最小值"和"最大值",但在某些情况下,它不适用于我们。 不知道是什么原因。 (即使我们删除了它,也可能与.hdbtabledata工件有关。)

有人可以确认db modul的构建应该可以自动处理Reset_By语句吗?

序列" TBASE.db.sequences :: A_DialyseID"以1000000000 MAXVALUE开始1999999999
 通过选择IFNULL(MAX(" DialyseID"),1000000000)+1从" TBASE.db.data::tbase.cds.md.A_Dialyse"重置

感谢您的帮助!

(7.6 kB)

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

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


专家们,

我们对序列(.hdbsequence)的行为感到有些惊讶。

如果我们首先通过sql插入更高的ID(5),我们试图找出序列的工作方式。 我们认为自动增量将在5点后开始,但事实并非如此。 它从1开始。

序列" TBASE.db.sequences :: A_DialyseID"
 通过选择IFNULL(MAX(" DialyseID"),0)+1从" TBASE.db.data::tbase.cds.md.A_Dialyse"重置

此后,我们尝试找出序列到ID 5时的计数方式,并意识到序列运行出错并停止了自动递增。

要解决此问题,我们想使用"最小值"和"最大值",但在某些情况下,它不适用于我们。 不知道是什么原因。 (即使我们删除了它,也可能与.hdbtabledata工件有关。)

有人可以确认db modul的构建应该可以自动处理Reset_By语句吗?

序列" TBASE.db.sequences :: A_DialyseID"以1000000000 MAXVALUE开始1999999999
 通过选择IFNULL(MAX(" DialyseID"),1000000000)+1从" TBASE.db.data::tbase.cds.md.A_Dialyse"重置

感谢您的帮助!

(7.6 kB)
付费偷看设置
发送
8条回答
compass1988
1楼-- · 2020-08-30 19:58

Reset_by仅在重新启动db时考虑,而在"仅"构建db模块时不考虑。 您要么必须删除并重新创建序列(具有已调整的)起始值,要么使用 ALTER SEQUENCE 语句带有" RESTART WITH"选项(当然,为此,您必须将DB Explorer连接到相应的HDI容器并执行命令)。

关于,
弗洛里安

大简至美
2楼-- · 2020-08-30 20:01

嗨,德克,

您解决了这个问题吗? 我们遇到了同样的问题。 希望我们能从您身边获得帮助。 预先感谢。

BR,

桑迪

闻人可可
3楼-- · 2020-08-30 19:49

嗨,德克,

我认为我正在理解您的问题,因为...您有一个序列,但是您直接在表上插入....即使该序列引用了您的表,该序列本身也是一个db对象 因此,序列值与您在表中插入的内容无关。 当您需要插入新值时,您的序列应随序列下一个val函数递增。.或者,您可以添加具有自动递增的标识,请参见此处的文档 https://help.sap.com/viewer/b3d0daf2a98e49ada00bf31b7ca7a42e7 >


我是小鹏鹏啊
4楼-- · 2020-08-30 20:04

嗨桑迪,

是的,我们解决了。

您只需要知道序列的重置方式和时间。

有两种方法:

1。 更改您的hdbsequences(即再空白)->在下一次部署mtar时,ID将重置为最后一个最大ID

2。 重新启动数据库租户-> ID将立即重置为最后一个最大ID

这意味着,如果您确实在没有序列的表中进行插入,则应继续选择上述方法之一。 最后,我们只使用了第二步,因为它的工作量较小,而且只需几分钟。

此致

Dirk

Tong__Ming
5楼-- · 2020-08-30 19:59

您能检查要检查的序列的当前值是表中的那个最大值吗?

您可以在SQL控制台中运行Sequencename.CURRVAL。

骆驼绵羊
6楼-- · 2020-08-30 19:55

"部署就足够了"->谢谢您的回答。 不幸的是,到目前为止,它无法正常工作。 也许我们现在还不熟悉,并犯了一些错误。

但是我们真正想知道的是,如果表中有更高的值并且我们使用此语句,那么NextValue应该从哪里开始? 1还是6? 该序列从1开始。我们期望从6开始。

序列" TBASE.db.sequences :: A_DialyseID"
 通过选择IFNULL(MAX(" DialyseID"),0)+1从" TBASE.db.data::tbase.cds.md.A_Dialyse"重置

一周热门 更多>