【问题标题】:How to get a list of all updated records in knex using Raw / SQL Server如何使用 Raw / SQL Server 获取 knex 中所有更新记录的列表
【发布时间】:2019-04-29 05:10:35
【问题描述】:
async updatePerson(critera, transaction) {
    return await this.knex.raw(`
    update person
          SET name = :name_new
          WHERE name = :name_old
`, critera)
      .transacting(transaction);
}

Critera是关注对象

{name_new: 'test person', name_old: 'test person2'}

transactionknex.transactionhttps://knexjs.org/#Builder-transacting

我想以 SQL 计数返回更新的记录和/或更新的总数。所以我可以让用户知道 SQL 运行的结果

类似于How to get a list of all updated records in knex / mysql

但在 SQL Server 的 RAW 中使用上述 SQL 查询。

为了获得插入的值,我使用以下效果很好。不确定在更新 SQL 的情况下如何实现:

async addPerson(person, transaction) {
    return await this.knex.raw(`insert into person(
        person_id
       ,name

        )  output inserted.[person_id]
 values(
        NEWID()
       ,:name
          )`, person)
      .transacting(transaction);
  }

人是对象{name: 'test person 123'}

参考:https://knexjs.org/#Raw-Bindings

【问题讨论】:

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


    【解决方案1】:

    您也可以将OUTPUT 子句与UPDATE 一起使用:

    UPDATE person
    SET name = :name_new
    OUTPUT deleted.name old_name, inserted.name new_name, inserted.person_id
    WHERE name = :name_old
    

    测试:

    CREATE TABLE #person(person_id int,name varchar(10))
    
    INSERT #person(person_id,name)VALUES(1,'aaa'),(2,'bbb'),(3,'bbb')
    
    -- returns 2 rows
    UPDATE #person
    SET name = 'ccc'
    OUTPUT deleted.name old_name, inserted.name new_name, inserted.person_id
    WHERE name = 'bbb'
    
    -- returns 0 rows
    UPDATE #person
    SET name = 'yyy'
    OUTPUT deleted.name old_name, inserted.name new_name, inserted.person_id
    WHERE name = 'zzz'
    
    DROP TABLE #person
    

    参考:https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql

    【讨论】:

    • 我怀疑如果有多个更新,它会像 select 语句一样逐行返回所有更新?
    • @Developer - 是的。
    • 是的,在这种情况下,它返回 0 行的记录集。
    • 你可以尝试测试一下。我在答案中添加了一个测试脚本。
    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多