首页 > 解决方案 > DB2 动态 sql,变量,返回标量值

问题描述

我有一张桌子:

ID (int, generated) OriginalID (int, nullable) ... other columns.

插入记录时,我想将“OriginalID”设置为生成的“ID”。目前脚本如下所示:

BEGIN ATOMIC DECLARE i INT; SET i = SELECT ID FROM NEW TABLE(INSERT INTO MyTable(...) VALUES (....)); UPDATE MyTable SET ORIGINALID=i WHERE ID=i; END

现在我遇到的问题是如何在调用 ExecuteScalar 方法时返回“i”以获取代码中的值?

我已经尝试过“SELECT i FROM SYSIBM.SYSDUMMY1”、“VALUES (i)”——两个语句都在代码中返回“null”。

如果我用这样的脚本调用 ExecuteScalar,我确实得到了值: SELECT ID FROM NEW TABLE(INSERT INTO MyTable(...) VALUES (....));

使用 DB2Connection 和 DB2Command 从 c# 代码(.net core/IBM.Data.DB2.Core 1.2.2.100)执行查询:

var query = ...;
var connection = new DB2Connection(conn_string);
var command = new DB2Command(connection, query);
command.parameters.Add(...);
var returnValue = command.ExecuteScalar(); << the value here is always 
null if trying to return the db2 variable; it works only if executing 
"single statement" 

**** 编辑 ****

在 Mark Ba​​rinstein 的帮助下得到了它:

查询中的最后一条语句现在是:“set @newId = i;” 在代码中:

var newId = new DB2Parameter("@newId", DB2Type.Integer);
newId.Direction = System.Data.ParameterDirection.Output;
command.Parameters.Add(newId);
command.ExecuteNonQuery();
var id = newId.Value;

标签: c#sqldb2

解决方案


推荐阅读