sql - iSeries DB2 - 有没有办法从插入语句中选择标识值?

标签 sql db2 ibm-midrange

我知道我们很少,我们这些穷人使用 iSeries for DB2/AS400,但我希望有人能回答这个简单的问题。有什么方法可以在不使用两行 SQL 的情况下从插入语句返回标识值?我被迫在 C# 中使用内联 SQL 来执行插入,然后我需要使用为插入生成的标识稍后进行某些操作。简单地说,我需要 iSeries DB2 等价于 Oracle 的“返回”。 IE。,

INSERT INTO AwesomeTable (column1, column2, etc.)
    VALUES (value1, value2, etc.)
    RETURNING something;

任何人?提前致谢。

编辑:除非有人知道我可以在一个 IBM.Data.DB2.iSeries.iDB2Command(不是存储过程)中执行两行 SQL 的方法,否则我想在一行 SQL 中执行所有这些操作

最佳答案

我不确定 iSeries,但以下适用于 db2v8.1:

考虑“ID”是您的身份列的名称。以下 stmt 将返回新生成的 id(与插入 stmt 插入的相同):

SELECT ID FROM FINAL TABLE (
    INSERT INTO AwesomeTable (column1, column2, etc.)
            VALUES (value1, value2, etc.)    
    )

我在 publib 网站上找到的一些解释: (我用它作为引用来测试我上面的查询)
     /* The following SELECT statement references an INSERT statement in its
           FROM clause.  It inserts an employee record from host variables into
           table company_b.  The current employee ID from the cursor is selected
           into the host variable new_id.  The keywords FROM FINAL TABLE
           determine that the value in new_id is the value of ID after the
           INSERT statement is complete.

           Note that the ID column in table company_b is generated and without
           the SELECT statement an additional query would have to be made in
           order to retreive the employee's ID number.
        */
        EXEC SQL SELECT ID INTO :new_id
                 FROM FINAL TABLE(INSERT INTO company_b
                 VALUES(default, :name, :department, :job, :years, :salary, 
                        :benefits, :id));

希望这可以帮助 :)

关于sql - iSeries DB2 - 有没有办法从插入语句中选择标识值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109621/

相关文章:

sql - 选择分隔字符串作为 Oracle sql 中的表

mysql - 按没有匹配对象的匹配数排序

c# - 参数化查询的问题

mysql - 获取选择多个表的最新行

sql - UTC 时间到本地时区(中部时间)转换 MS SQL Server

database - 如何从 IBM 命令行运行存储过程?

db2 - 导出/导入一个表的所有信息

iSeries/IBMDB2I 上的 MySQL 表

message - 如何捕获AS400系统错误消息并将其用作CL中我自己的程序消息?

java - 读取所有页面的 AS400 假脱机文件 - JAVA (JT400)