c# - 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 Barinstein 的帮助下得到了它:
查询中的最后一条语句现在是:“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;
解决方案
推荐阅读
- ansible - Ansible 角色未运行
- sql - 系统地跟踪在 Postgresql 中分组的行?
- odata - 在 CDS 视图中创建新条目时出错
- c - 是否可以在 _PROGRAMS 变量中为所有程序设置特定的 _CFLAGS、_LDADD 等变量?
- python - Python ImportError:尝试在没有已知父包的情况下进行相对导入
- sql - 如何在postgreSQL中找到在一段时间内具有最大订单总和的公司?
- python - 想要在启动时启动 RASPIVID(预览/显示到 HDMI)并且能够停止 RASPIVID(通过按键或按钮按下)
- python - 更改数据框时如何将熊猫数据框保存到文件中?
- php - WooCommerce sql 查询以查找具有特定元键和元值的产品
- python - 让文字游戏进入另一个房间并收集物品