gpt4 book ai didi

sql-server - 在返回查询中不遵守更新插入的 where 子句的 Sequelize

转载 作者:行者123 更新时间:2023-12-03 22:39:11 24 4
gpt4 key购买 nike

我正在使用 sequelize 连接到 SQL Server。这是 upsert 的基本调用:

RolesPerms.upsert({
// values
role_id: rolePerm.role_id,
permission_name: rolePerm.permission_name
}, {
// options
where: {
role_id: rolePerm.role_id,
permission_name: rolePerm.permission_name
},
returning: true
}).then(result => {
console.log('dv', result[0].dataValues);
returnArr.push(result[0].dataValues);
return result[0].dataValues;
})

查看日志,我看到初始查询如下所示:

Executing (default): MERGE INTO [roles_perms] WITH(HOLDLOCK) AS [roles_perms_target] USING (VALUES(1, N'Role delete', '2018-10-03 23:28:58.868 +00:00', '2018-10-03 23:28:58.868 +00:00')) AS [roles_perms_source]([role_i d], [permission_name], [createdAt], [updatedAt]) ON [roles_perms_target].[role_id] = [roles_perms_source].[role_id] AND [roles_perms_target].[permission_name] = [roles_perms_source].[permission_name] WHEN MATCHED THEN UPDATE SET [roles_perms_target].[role_id] = 1, [roles_perms_target].[permission_name] = N'Role delete', [roles_perms_target].[updatedAt] = '2018-10-03 23:28:58.868 +00:00' WHEN NOT MATCHED THEN INSERT ([role_id], [perm ission_name], [createdAt], [updatedAt]) VALUES(1, N'Role delete', '2018-10-03 23:28:58.868 +00:00', '2018-10-03 23:28:58.868 +00:00') OUTPUT $action, INSERTED.*;



随后是此日志消息:

Executing (default): SELECT [role_id], [permission_name], [createdAt], [updatedAt] FROM [roles_perms] AS [roles_perms] WHERE [roles_perms].[role_id] = 1;



请注意该 SELECT 语句如何不使用 upsert 中定义的 WHERE。因为 upsert 中的两个字段是主键的定义,所以这会导致一个 select 语句,它总是只获取第一个项目以匹配 role_id 而不是刚刚更新的实际项目。换句话说,大多数时候结果是错误的。幸运的是,初始查询确实工作正常,所以数据库是好的。但我确实想向调用应用程序报告正确的结果!

这是一个错误还是我错过了文档中的某些内容?

最佳答案

您看到的第二个查询来自 returning: true,仅用于返回更新的记录,如您在 SQL 日志中看到的那样,通过 ID 查询。第一个 upsert 语句确实包含您的标准,特别是:

where: {
role_id: rolePerm.role_id,
permission_name: rolePerm.permission_name
}

映射到以下 SQL 中的 1Role delete:
MERGE INTO ... USING (VALUES(1, N'Role delete', ...

然后将其加入到支持您的模型的表中,以检测是否存在匹配(然后更新)或不匹配(插入)以满足“更新插入”的要求。

关于sql-server - 在返回查询中不遵守更新插入的 where 子句的 Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52637085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com