如何使用 Raw / SQL Server 获取 knex 中所有更新记录的列表
How to get a list of all updated records in knex using Raw / SQL Server
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'}
transaction
是 knex.transaction
: https://knexjs.org/#Builder-transacting
我想 return 更新记录 and/or 更新总计 SQL 计数。所以我可以让用户知道 SQL 运行
的结果
类似于
但在 SQL 服务器上使用上述 SQL RAW 查询。
为了获得插入值,我使用了以下方法,效果很好。不确定在更新 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'}
您还可以将 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
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'}
transaction
是 knex.transaction
: https://knexjs.org/#Builder-transacting
我想 return 更新记录 and/or 更新总计 SQL 计数。所以我可以让用户知道 SQL 运行
的结果类似于
但在 SQL 服务器上使用上述 SQL RAW 查询。
为了获得插入值,我使用了以下方法,效果很好。不确定在更新 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'}
您还可以将 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