coldfusion - 如何在 Coldfusion 2021 脚本中获取 MSSQL“插入”查询的生成密钥?
问题描述
问题
我想从 SQL 查询中获取插入行的 id:
INSERT INTO NameList (Name) VALUES('John')
我需要在 Coldfusion 2021 脚本中执行此操作,如下所示:
var sqlQuery = "INSERT INTO NameList (Name) VALUES(?)";
var params = [{ value: "John", cfsqltype: "cf_sql_varchar" }];
try {
var executedQuery = queryExecute(sqlQuery, params, {/* ...other options... */});
//This is where it fails, because getResult() returns NULL.
var insertedId = executedQuery.getResult().GENERATEDKEY;
}
catch (any ex) {
//...report the error, read ex.message
}
但这不起作用,因为getResult()返回 NULL。
研究
我已经读到获取数据的正确方法不是通过getResult(),而是使用StackOverflow 答案中的getPrefix() :从 cfscript 中的coldfusion newQuery() 获取结果元数据
但这不起作用,getPrefix()也返回 NULL。我在 CFDocs.org 或 Adobe 的文档中找不到有关此功能的文档(尽管 Adobe 的文档对我来说很难浏览)。
getPrefix()函数在cffiddle.org 上也不起作用,所以我无法测试它。
临时解决方案
我已经能够使用我试图避免的样式获取插入行的 id:通过 queryExecute 的选项参数传入命名结果变量。
//...clipped...
try {
//The options.result parameter is set to 'queryResult'.
var executedQuery = queryExecute(sqlQuery, params, { result = "queryResult" });
//This works, though I'm not sure where 'queryResult' exists in scope.
var insertedId = queryResult.GENERATEDKEY;
}
//...clipped...
我不知道queryResult的范围是什么(它是全局的吗?),但这有效。我更喜欢传入一个局部变量,但传入会{ result = "someLocalVar" }
导致错误。
有没有办法传入局部变量?我会觉得这是可以接受的。
结论
我想使用 Coldfusion 2021 脚本获取插入行的 ID。我宁愿不使用 queryExecute() 的options.result参数,而是使用getResult()或类似的机制。
如果这不可能,那么我希望能够将局部变量传递给 queryExecute() 的options.result参数。
如果那不可能,那么我至少想知道options.result引用的变量的范围是什么。
解决方案
var executedQuery = queryExecute(sqlQuery, params, { result = "queryResult" });
查看参数,您将结果指定为 queryResult。因此,它具有生成的密钥。
文档表明您不需要指定结果(https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-mr/queryexecute.html)以及查询执行结果的结果/返回结果,但这似乎无法按照 ACF2021 中的文档工作。
我会在下面提出建议。
try {
var executedQuery = '';
queryExecute(sqlQuery, params, { result = "executedQuery" });
var insertedId = executedQuery.GENERATEDKEY;
}
推荐阅读
- c# - 如何在 ItemDataBound 中获取项目?
- c# - 查询后是否调用ValueConverter?
- react-native - React Native 无法向 reducer 发送操作
- python - 如何使用python将列表值替换为索引引用
- microsoft-graph-api - 是否有任何功能可以让我在 msteams 的团队中获取回复消息的 url,其对话是由用户发起的
- angular - 添加修改或删除角垫表中的任何行,角8
- spring - 使用 spring.cloud.kubernetes.secrets.paths 属性将机密作为文件读取
- python - python for循环只更新3个变量中的2个?
- c++ - C ++:编译期间的int计算(而不是运行期间)
- javascript - discord.js 将频道权限设置为“/”(中性)