【问题标题】:Sequelize MSSQL - Does not return metadata and resultsSequelize MSSQL - 不返回元数据和结果
【发布时间】:2018-08-30 17:54:45
【问题描述】:

我在 MSSQL 数据库上运行如下原始查询:

sequelize.query(DELETE FROM vehicle where vehicleId IN ('1', '2', '3'))

返回总是[ [], [] ]。这应该包含元数据和数组结果。我们还有一个具有相同表的 MYSQL 数据库。当在那里运行相同的查询时,结果会带有预期的元数据和结果。

根据documentation,如果我将{ type: sequelize.QueryTypes.DELETE} 作为第二个参数,它将只返回没有元数据的结果。相反,它返回undefined

我在这里错过了什么?

【问题讨论】:

  • 您确定您的查询没有双引号吗?像 sequelize.query("SELECT FROM vehicle where vehicleId IN ('1', '2', '3')").顺便在 seq.query().spread 之后使用 spread 来获取结果和元数据
  • 实际代码中有双引号。也试过传播,但无济于事。

标签: sql-server node.js sequelize.js


【解决方案1】:

因此,对于那些希望找到相同或类似问题的答案的人,我通过添加 OUTPUT DELETED.id, DELETED.createdOn, ... WHERE <where clause> 来完成这项工作。这也适用于插入。您只需将DELETED 替换为INSERTED。更多详情请参考此documentation

PS:在原始问题上错误地指出SELECT 而不是DELETE

【讨论】:

    【解决方案2】:

    我通过在 INSERT 语句后附加一个 SELECT 语句解决了这个问题。对于我的特定问题,我有以下内容:

    sequelize.query('INSERT INTO Users (FirstName, LastName, Email, Pwd) VALUES (@first_name, @last_name, @email, @password)')
    

    我已将其更新为

    sequelize.query('INSERT INTO Users (FirstName, LastName, Email, Pwd) VALUES (@first_name, @last_name, @email, @password) SELECT FirstName, LastName, Email, UserID FROM Users WHERE Email = @email')
    

    为清楚起见,下面是完整的 SQL 语句:

    INSERT INTO Users (FirstName, LastName, Email, Pwd)
    VALUES (@first_name, @last_name, @email, @password)
    SELECT FirstName, LastName, Email, UserID
    FROM Users
    WHERE Email = @email
    

    基本上是两个查询。这将返回插入的数据,而无需使用 OUTPUT 子句。

    【讨论】:

    • 请提供更多信息,我们中的一些人可能不完全理解这个答案。
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2019-05-13
    相关资源
    最近更新 更多