When to Use TVP vs Bulk
The simple rule#
Use a Table Valued Parameter TVP when rows are part of a stored procedure call.
Use bulk insert when rows need to be copied directly into a table efficiently.
TVP example shape#
var parameters = new MooParams() .AddTableValuedParameter("@Items", table, "dbo.udt_Items"); await db.ExecuteAsync("dbo.usp_Item_Import", parameters);
Bulk example shape#
await db.Bulk.WriteToTableAsync("dbo.tbl_Item_Stage", rows);
Why the distinction matters#
A TVP is still part of a normal command execution contract.
Bulk insert is a table-loading operation with a different performance profile and different intent.