传递给 .set() 的所有值都会自动参数化。
例如,这个查询:
await db.update(users).set({ name: "Mr. Dan" }).where(eq(users.name, "Dan"));将会被翻译为:
update [users] set [name] = @par0 where [users].[name] = @par1; -- params: ['Mr. Dan', 'Dan']传递给 .set() 的所有值都会自动参数化。
例如,这个查询:
await db.update(users).set({ name: "Mr. Dan" }).where(eq(users.name, "Dan"));将会被翻译为:
update [users] set [name] = @par0 where [users].[name] = @par1; -- params: ['Mr. Dan', 'Dan']你传递给 update 的对象应当包含与数据库 schema 中列名匹配的键。
对象中值为 undefined 的项会被忽略:如果要将某一列设为 null,请传入 null。
await db.update(users)
.set({ name: 'Mr. Dan' })
.where(eq(users.name, 'Dan'));await db.update(users)
.set({ name: null })
.where(eq(users.name, 'Dan'));你可以将 SQL 作为值传递到更新对象中,像这样:
await db.update(users)
.set({ updatedAt: sql`NOW()` })
.where(eq(users.name, 'Dan'));此方法允许你返回查询所影响行中的值。MSSQL 支持返回插入的(新行值)和删除的(旧行值)值。
如果未指定任何字段,默认会返回所有插入值。
// 更新 cars 并返回所有新值
const updatedCars: Car[] = await db.update(cars)
.set({ color: 'red' })
.output()
.where(eq(cars.color, 'green'));
// 更新 cars 并返回所有新值
const updatedCars: Car[] = await db.update(cars)
.set({ color: 'red' })
.output({ inserted: true })
.where(eq(cars.color, 'green'));
// 更新 cars 并返回所有旧值
const updatedCarsIds: { deleted: Car }[] = await db.update(cars)
.set({ color: 'red' })
.output({ deleted: true })
.where(eq(cars.color, 'green'));
// 更新 cars 并返回部分旧值和新值
const beforeAndAfter: { deleted: { oldColor: string }, inserted: { newColor: string } }[] = await db.update(cars)
.set({ color: 'red' })
.output({
deleted: { oldColor: cars.color },
inserted: { newColor: cars.color }
})
.where(eq(cars.color, 'green'));update [cars] set [color] = 'red' output INSERTED.[name], INSERTED.[color] where [cars].[color] = 'green';
update [cars] set [color] = 'red' output INSERTED.[name], INSERTED.[color] where [cars].[color] = 'green';
update [cars] set [color] = 'red' output DELETED.[name], DELETED.[color] where [cars].[color] = 'green';
update [cars] set [color] = 'red' output INSERTED.[color], DELETED.[color] where [cars].[color] = 'green';