sql - 修复“动态”查询而不向我抛出给定的错误?
问题描述
UPDATE dbo.Einkauf_Web_Upload
SET
${
updatedUpload.Menge !== null
? `Anzahl = ${`${updatedUpload.Menge}`},`
: null
},
${
updatedUpload.ENummer !== null
? `ENummer = ${`'${updatedUpload.ENummer}'`}`
: null
}
WHERE ...
这个查询应该区分对象的更新值updatedUpload
,最初,它的所有值都设置为空。如果该值未更改因此未更新,则查询不得影响特定列。在当前状态下,查询会引发以下错误:
关键字“null”附近的语法不正确
我知道为什么;如果您不更改 Menge 属性,则查询如下所示:
UPDATE dbo.Einkauf_Web_Upload
SET null, ENummer = "abc"
WHERE ..
有解决方法吗?我使用 NodeJs 作为我的后端,并考虑尝试通过映射数组使列引用动态化,该映射数组仅包含updatedUpload
.
将不胜感激任何帮助!
解决方案
SET null, ...
是无效的 SQL 语法,你应该跳过null
。此外,如果没有要更新的内容,请记住不要执行查询,因为SET WHERE ...
这也是无效的语法。
我会建议类似:
let updates = [
updatedUpload.Menge !== null ? `Anzahl = ${`${updatedUpload.Menge}`}` : null,
updatedUpload.ENummer !== null ? `ENummer = ${`'${updatedUpload.ENummer}'`}` : null,
// ... add here
]
// Filter out null updates
updates = updates.filter(u => !!u);
// Do query only if updates are avaliable
if (updates.length > 0) {
const sql = `UPDATE dbo.Einkauf_Web_Upload SET ${updates.join(', ')} WHERE ...`;
// ... execute
}
推荐阅读
- animation - Qt 如何为 QProgressBar 设置动画?
- c - printf()、无符号字符和 %hhd
- amazon-web-services - 如何向 AWS cognito 注册添加额外字段
- javascript - 平滑移动跨页面移动元素
- python - Python 程序无法运行 - psycopg2 重命名警告
- javascript - 在 li 列表中查找 li 的位置
- javascript - 续集中是一对一还是多对一?
- c# - HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是“基本”
- css - 我们如何在新设计中创建 CSS 通知警报
- javascript - 如何在 url 中不包含结束标点符号(正则表达式)