插入后撤回身份

2020-08-24 13:57发布

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

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


我正在用ASE编码存储过程,但无法弄清楚如何从插入中获取标识值。 我需要将此新键作为其他表的外键。

我不能使用游标,也不能使用@@ identity,因为它是一个以上的行插入查询,并且我不能使用候选键来检索行,因为它没有行。

我发现在SQL服务器中,查询中使用子句OUTPUT。

有什么主意吗? 谢谢你!

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

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


我正在用ASE编码存储过程,但无法弄清楚如何从插入中获取标识值。 我需要将此新键作为其他表的外键。

我不能使用游标,也不能使用@@ identity,因为它是一个以上的行插入查询,并且我不能使用候选键来检索行,因为它没有行。

我发现在SQL服务器中,查询中使用子句OUTPUT。

有什么主意吗? 谢谢你!

付费偷看设置
发送
1条回答
灬番茄
1楼 · 2020-08-24 14:21.采纳回答

您可能已经发现... ASE没有提供类似于MS SQL Server的OUTPUT子句的任何内容。

虽然您可以使用自己的伪OUTPUT功能(例如,插入写入 插入。 到另一个表),该"解决方案"很快变得非常笨拙(并且可能使DBA感到性能和/或维护头痛)。

---- -------------

如果您碰巧事先知道要插入多少行(例如,运行select/count(*)),则可以 在执行插入之前*,请ASE保留一定范围的标识值。

如果这是一个选项(例如,您事先知道行数),请考虑:

  • ASE内置函数: reserve_identity(<表名>,
  • 将返回:保留中的第一个 > 范围

不幸的是,ASE手册中的 reserve_identity()示例仍然不够清晰。

Rob简要介绍了 reserve_identity()以及几个简单的示例,来自他的 2008年12月的ASE测验问题

一些警告:

  • 您需要运行ASE 15.0(或更高版本)
  • reserve_identity()函数返回一个varchar,因此您需要转换为数字数据类型(int, bigint,numerical(x,0))用作数字(例如,计算范围的结束)之前
  • ASE服务器配置" 身份保留大小"会受到限制 一次可以保留多少个身份值(与DBA讨论根据您的需要进行设置)
  • 任何未使用的身份值都会"丢失",从而使身份值出现缺口 在表格中

一周热门 更多>