Allows you to return data from modified rows.
On supported databases like MS SQL Server (MSSQL), this method can be chained to insert, update, delete and merge queries to return data.
insert
update
delete
merge
Also see the outputAll method.
Return one column:
const { id } = await db .insertInto('person') .output('inserted.id') .values({ first_name: 'Jennifer', last_name: 'Aniston', gender: 'female', }) .executeTakeFirstOrThrow() Copy
const { id } = await db .insertInto('person') .output('inserted.id') .values({ first_name: 'Jennifer', last_name: 'Aniston', gender: 'female', }) .executeTakeFirstOrThrow()
The generated SQL (MSSQL):
insert into "person" ("first_name", "last_name", "gender")output "inserted"."id"values (@1, @2, @3) Copy
insert into "person" ("first_name", "last_name", "gender")output "inserted"."id"values (@1, @2, @3)
Return multiple columns:
const { old_first_name, old_last_name, new_first_name, new_last_name } = await db .updateTable('person') .set({ first_name: 'John', last_name: 'Doe' }) .output([ 'deleted.first_name as old_first_name', 'deleted.last_name as old_last_name', 'inserted.first_name as new_first_name', 'inserted.last_name as new_last_name', ]) .where('created_at', '<', new Date()) .executeTakeFirstOrThrow() Copy
const { old_first_name, old_last_name, new_first_name, new_last_name } = await db .updateTable('person') .set({ first_name: 'John', last_name: 'Doe' }) .output([ 'deleted.first_name as old_first_name', 'deleted.last_name as old_last_name', 'inserted.first_name as new_first_name', 'inserted.last_name as new_last_name', ]) .where('created_at', '<', new Date()) .executeTakeFirstOrThrow()
update "person"set "first_name" = @1, "last_name" = @2output "deleted"."first_name" as "old_first_name", "deleted"."last_name" as "old_last_name", "inserted"."first_name" as "new_first_name", "inserted"."last_name" as "new_last_name"where "created_at" < @3 Copy
update "person"set "first_name" = @1, "last_name" = @2output "deleted"."first_name" as "old_first_name", "deleted"."last_name" as "old_last_name", "inserted"."first_name" as "new_first_name", "inserted"."last_name" as "new_last_name"where "created_at" < @3
Return arbitrary expressions:
import { sql } from 'kysely'const { full_name } = await db .deleteFrom('person') .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')) .where('created_at', '<', new Date()) .executeTakeFirstOrThrow() Copy
import { sql } from 'kysely'const { full_name } = await db .deleteFrom('person') .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')) .where('created_at', '<', new Date()) .executeTakeFirstOrThrow()
delete from "person"output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"where "created_at" < @1 Copy
delete from "person"output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"where "created_at" < @1
Return the action performed on the row:
await db .mergeInto('person') .using('pet', 'pet.owner_id', 'person.id') .whenMatched() .thenDelete() .whenNotMatched() .thenInsertValues({ first_name: 'John', last_name: 'Doe', gender: 'male' }) .output([ 'inserted.id as inserted_id', 'deleted.id as deleted_id', ]) .execute() Copy
await db .mergeInto('person') .using('pet', 'pet.owner_id', 'person.id') .whenMatched() .thenDelete() .whenNotMatched() .thenInsertValues({ first_name: 'John', last_name: 'Doe', gender: 'male' }) .output([ 'inserted.id as inserted_id', 'deleted.id as deleted_id', ]) .execute()
merge into "person"using "pet" on "pet"."owner_id" = "person"."id"when matched then deletewhen not matched theninsert ("first_name", "last_name", "gender")values (@1, @2, @3)output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id" Copy
merge into "person"using "pet" on "pet"."owner_id" = "person"."id"when matched then deletewhen not matched theninsert ("first_name", "last_name", "gender")values (@1, @2, @3)output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
Adds an output {prefix}.* to an insert/update/delete/merge query on databases that support output such as MS SQL Server (MSSQL).
output {prefix}.*
output
Also see the output method.
Allows you to return data from modified rows.
On supported databases like MS SQL Server (MSSQL), this method can be chained to
insert
,update
,delete
andmerge
queries to return data.Also see the outputAll method.
Examples
Return one column:
The generated SQL (MSSQL):
Return multiple columns:
The generated SQL (MSSQL):
Return arbitrary expressions:
The generated SQL (MSSQL):
Return the action performed on the row:
The generated SQL (MSSQL):